编辑:删除旧问题,以便在帖子中更容易找到解决方案
Seaborn是一个基于matplotlib的Python数据可视化库。要使用Seaborn,您的数据必须位于tidy format中
您可以使用Pandas DataFrame.loc[]筛选数据帧
在下面的示例中,我将(1)将CSV文件中的一些数据加载到数据框中,(2)根据列中的特定值过滤该数据,(3)使用Seaborn在箱线图中显示该数据,以及(4)决定数据的显示顺序和应使用的标签
一些示例数据
Object,Metric,Score
M11,B2A10,2.7939033333333336
MT1,B2A10,1.287634388888889
MT1,B2A1,7.1535
MT1,B2A2,2.2441833333333334
MT1,B2A3,3.3787333333333334
MT1,B2A4,2.50297
MT1,B2A5,1.4254989999999998
MT1,B2A6,2.91325
MT1,B2A7,1.24806
MT1,B2A8,2.08797725
MT1,B2A9,1.208722
import pandas as pd
import seaborn as sns
sns.set(style="whitegrid", palette="colorblind")
data = pd.read_csv("data.csv")
list = ["B2A10", "B2A1"]
filtered_data = data.loc[data['Metric'].isin(list)]
fig, ax = plt.subplots(figsize=(10,6))
ax = sns.boxplot(x='Metric', y='Length', data=samples, order=["B2A1", "B2A10"])
ax = sns.swarmplot(x="Metric", y="Length", data=samples, color=".25", order=["B2A1", "B2A10"])
ax.set_xlabel('Label X-Axis')
ax.set_ylabel('Label Y-Axis')
plt.title('Title',fontsize=16)
labels = [item.get_text() for item in ax.get_xticklabels()]
labels[0] = 'Sample 1'
labels[1] = 'Sample 2'
ax.set_xticklabels(labels)
plt.savefig('test.png', dpi=300, bbox_inches='tight')
最后的图表应该是这样的
我将在下面回答你的两个问题
1)要对绘图中的值进行排序(例如,按
Score
排序),您可以首先通过“Score”对Metric
进行排序(将其用作箱线图的order
参数),方法如下:然后将
order=sorted_order
传递给您的箱线图调用2)要更改任何基于matplotlib的绘图(例如通过seaborn生成的绘图)的xticks标签,您可以获取轴的句柄(通过
plt.gca()
获取以下轴中的当前轴),并执行以下操作:这样,您将从
Metrics
获取xticks标签,并根据Score
进行排序我找到了解决这两个问题的办法
(1)第一种解决方案是简单地从原始数据中过滤我想要的项目,并保存为新的数据文件。我认为这是次优的,但符合我的目的。我认为直接根据图表中显示的内容过滤项目会更有效
(2)我找到了一种基于位置更改图形标签的方法(记住Python开始计数时是0,而不是1)。我直接在定义图形的位置之后添加此代码
希望有人会觉得这个有用
相关问题 更多 >
编程相关推荐