python - 平行图中相同的 Y 轴

标签 python pandas matplotlib seaborn

我有这个代码:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns;sns.set_style("whitegrid")
import seaborn as sns;
sns.set(style="ticks")

x = pd.read_csv("C:\\Users\dell\\Desktop\\delikatesy_owoce_i_warzywa(wyczyszczone).csv", sep=',')

x2 = x[x.grupa.str.contains('RAZEM') == False]

del x2['rok']
del x2['miesiac']
del x2['dzien_tygodnia_liczba']
del x2['dzien']
del x2['data2']
del x2['Unnamed: 0']

x2['data'] = pd.to_datetime(x2['data'])  
x3 = x2[x2["data"].isin(pd.date_range('2017-10-01','2017-10-18'))]

x4 = x3.groupby('grupa')['marza_netto'].agg({"marza_netto2": 'size'}).join(x3.groupby('grupa').sum()).reset_index()

x4.insert(4,'marza_procent2', x4['marza_procent']/x4['marza_netto2'])
del x4['marza_netto2']
del x4['marza_procent']

x4 = x4.set_index('grupa').T.rename_axis('DANE').reset_index().rename_axis(None,1)

flatui = ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71"]

fig, ax = plt.subplots(1,3)
g1 = sns.barplot(x="DANE", y="OWOCE", 
    palette=sns.color_palette(flatui),data=x4,ci=None, ax=ax[0])
g2 = sns.barplot(x="DANE", y="WARZYWA", 
    palette=sns.color_palette(flatui),data=x4,ci=None, ax=ax[1])
g3 = sns.barplot(x="DANE", y="NASIONA", 
    palette=sns.color_palette(flatui),data=x4,ci=None, ax=ax[2])

sns.despine()

g1.figure.set_size_inches(8,6)

g2.axes.set_title('Wpływ procentu marży na wielkosć sprzedaży',
    fontsize=15,color="b",alpha=0.3)

g1.set_xlabel("OWOCE",size = 15,color="g",alpha=0.5)
g2.set_xlabel("WARZYWA",size = 15,color="g",alpha=0.5)
g3.set_xlabel("NASIONA",size = 15,color="g",alpha=0.5)

g1.set_ylabel("",size = 20,color="r",alpha=0.5)
g2.set_ylabel("",size = 20,color="r",alpha=0.5)
g3.set_ylabel("",size = 20,color="r",alpha=0.5)

plt.setp(g1.get_xticklabels(), rotation=-45)
plt.setp(g2.get_xticklabels(), rotation=-45)
plt.setp(g3.get_xticklabels(), rotation=-45)

enter image description here

我分别比较三个产品组。而且我不知道如何使每个图上 Y 轴上的值彼此成比例并与其他图的结果相关。因为在这种形状中,结果并不代表产品之间的实际比例。

此外,代码中使用g1、g2、g3的地方是否可以放入某个循环中?因为这种形式的代码看起来不太优雅:)

我将感谢所有的建议。

最佳答案

您可以将 sharey=True 传递给 plt.subplots

请参阅以下文档以获取更多信息: https://matplotlib.org/devdocs/api/_as_gen/matplotlib.pyplot.subplots.html

对于将子图放入循环中的第二个问题,您可以使用 enumerate 来循环索引递增的列列表:

for index,name in enumerate(['OWOCE','WARZYWA','NASIONA']):
    gg = sns.barplot(x="DANE", y=name, palette=sns.color_palette(flatui),data=x4,ci=None, ax=ax[index])
    gg.set_xlabel(name,size = 15,color="g",alpha=0.5)
    gg.set_ylabel("",size = 20,color="r",alpha=0.5)
    plt.setp(gg.get_xticklabels(), rotation=-45)
    if index==1:
        gg.axes.set_title('Wpływ procentu marży na wielkosć sprzedaży',
        fontsize=15,color="b",alpha=0.3)

关于python - 平行图中相同的 Y 轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47122494/

相关文章:

Python删除停用词(pandas数据帧): output same as input

python - 连接上的过滤器不会传播到相关的 orm.relations

python - 在 django 内部和外部工作的包。这是一个好的设计吗?

python - 最小节点割(Igraph)

python - 将数据帧拆分为分组 block

python - 尝试在 Matplotlib 中绘制子图时,绘图绘制不正确

python - 访问keras中微调网络中中间层的输出

python - Pandas :对多列求和,但如果该行中的任何列为 NaN 或 0,则写入 NaN

python - 从 python 生成电影而不将单个帧保存到文件

python - Pandas df.plot 子图上的多个传说?