Maison  >  Article  >  développement back-end  >  Python-matplotlib | Dessiner des graphiques à double axe Y (paramètres de légende)

Python-matplotlib | Dessiner des graphiques à double axe Y (paramètres de légende)

Python当打之年
Python当打之年avant
2023-08-09 16:06:302326parcourir


Aujourd'hui, je vais vous présenter comment utiliser la bibliothèque matplotlib de Python pour dessiner des graphiques à double axe Y et ses paramètres de légende J'espère que cela vous sera utile si vous l'avez fait. Pour toute question ou suggestion, vous pouvez envoyer un message privé à l'éditeur.
Aperçu du rendu :

Python-matplotlib | Dessiner des graphiques à double axe Y (paramètres de légende)

Données d'échantillon :
df = pd.read_csv('jobdata.csv')
Python-matplotlib | Dessiner des graphiques à double axe Y (paramètres de légende)

1. Graphique linéaire à double axe Y

1. Graphique linéaire des numéros de position

colors = ["#51C1C8", "#536D84","#E96279"]
plt.figure(figsize=(16, 8))
ax1 = plt.subplot(111)
ax1.set_ylim(0,1200)
lin0 = ax1.plot(x_data, y_data1, marker='o', color=colors[0], label='岗位数量') 
for x, y in enumerate(y_data1):
    plt.text(x - 0.2, y+5, y)
ax1.set_ylabel('岗位数量',fontsize=12)
plt.legend()
plt.title("各城市Java岗位数量")
plt.show()

Python-matplotlib | Dessiner des graphiques à double axe Y (paramètres de légende)

2. Ajoutez un axe y via ax1.twinx( ) :

# 增加y轴
ax2 = ax1.twinx()

ax2.set_ylim(0,60)
lin1 = ax2.plot(x_data, y_data2, linestyle='--', marker='o', c=colors[1], label='平均最低薪资') 
for x, y in enumerate(y_data2):
    plt.text(x - 0.1, y+1, y)
lin2 = ax2.plot(x_data, y_data3, linestyle='--', marker='o', c=colors[2], label='平均最高薪资')
for x, y in enumerate(y_data3):
    plt.text(x - 0.1, y+1, y)
ax2.set_ylabel('平均薪资(万/年)',fontsize=12)
plt.legend()
plt.title("各城市Java岗位数量和薪资水平状况")
plt.show()

Python-matplotlib | Dessiner des graphiques à double axe Y (paramètres de légende)

重点:细心的小伙伴可能发现了图没有问题,但是右上角的图例只显示了平均最低薪资和平均最薪资,但是岗位数量的图例并没有显示。

3. 单独设置图例

ax1.legend(loc='best')
ax2.legend(loc='best')

Python-matplotlib | Dessiner des graphiques à double axe Y (paramètres de légende)

看着感觉没什么变化,实际上仔细看会发现平均最低薪资、平均最高薪资、岗位数量三个图例都显示出来了,只不过岗位数量图例被盖住了,我们可以移动一下位置看看:
ax1.legend(loc=2)
ax2.legend(loc=1)

Python-matplotlib | Dessiner des graphiques à double axe Y (paramètres de légende)

这样看就比较直观了,但是我就想把三个图例放一起不可以吗?

当然可以!

3. 设置组合图例

lines = lin0+lin1+lin2
labs = [label.get_label() for label in lines]
plt.legend(lines,labs)

Python-matplotlib | Dessiner des graphiques à double axe Y (paramètres de légende)


大功告成!

但是!如果是柱状图+折线图的情况,效果还一样吗?

但是!如果是柱状图+折线图的情况,效果还一样吗?

但是!如果是柱状图+折线图的情况,效果还一样吗?


2、双y轴柱状图+折线图

1. 修改岗位数量为柱状图

plt.figure(figsize=(16, 8))
a1 = plt.subplot(111)
a1.set_ylim(0,1200)
bar = a1.bar(x_data, y_data1, color=colors[0], label='岗位数量') 
for x, y in enumerate(y_data1):
    plt.text(x - 0.2, y+5, y)
a1.set_ylabel('岗位数量',fontsize=12)

...

lines = bar+lin1+lin2
labs = [label.get_label() for label in lines]
plt.legend(lines,labs)

直接报错了!Python-matplotlib | Dessiner des graphiques à double axe Y (paramètres de légende)Python-matplotlib | Dessiner des graphiques à double axe Y (paramètres de légende)Python-matplotlib | Dessiner des graphiques à double axe Y (paramètres de légende)

Python-matplotlib | Dessiner des graphiques à double axe Y (paramètres de légende)

Le type d'invite est incohérent. Il s'agit évidemment d'un problème avec le type de barre et de ligne. Vérifions le code source :

matplotlib.axes.Axes.plot :

Python-matplotlib | Dessiner des graphiques à double axe Y (paramètres de légende)

matplotlib.axes. Axes.bar :

Python-matplotlib | Dessiner des graphiques à double axe Y (paramètres de légende)

ax.plot renvoie une liste de type Line2D, et ax.bar renvoie un tuple de type patches.
Après avoir trouvé la cause première, nous faisons simplement une combinaison de line2D et de patchs.

2. 设置Line2D和patches的组合图例

legend_handles = [ 
    Line2D([], [], linewidth=1, ls='--', lw=2, c=colors[2], label='平均最高薪资'),
    Line2D([], [], linewidth=1, lw=2, c=colors[1], label='平均最低薪资'),
    patches.Rectangle((0, 0), 1, 1, facecolor=colors[0],label='岗位数量')
]
plt.legend(handles=legend_handles, loc='best', fontsize=14)
效果:
Python-matplotlib | Dessiner des graphiques à double axe Y (paramètres de légende)
其他参数大家可以自行尝试修改,对比前后效果,加深理解。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer