Python 如何使用希腊符号替换matplotlib条形图中主轴和次轴的图例标签?
我有一个由6列组成的数据框,我想将其绘制为条形图。 最后3列位于次轴上的。绘图上显示的默认图例是列名。但是我需要把图例改成希腊符号。为此,我面临两个问题:Python 如何使用希腊符号替换matplotlib条形图中主轴和次轴的图例标签?,python,pandas,matplotlib,plot,legend,Python,Pandas,Matplotlib,Plot,Legend,我有一个由6列组成的数据框,我想将其绘制为条形图。 最后3列位于次轴上的。绘图上显示的默认图例是列名。但是我需要把图例改成希腊符号。为此,我面临两个问题: 当我使用plt.legend添加新的图例名称时,它会添加一个新的图例,而不是更改现有的图例框 当我尝试更改所有图例时,它只更改次轴上的图例(最后3列数据),而不更改绘制在左轴上的数据 有没有办法解决这些问题 此外,如何使用均匀间距(或指定间距,如果可能)和y轴字体大小和重量来指定左右y轴限制 下面是一个示例代码: import pandas
plt.legend
添加新的图例名称时,它会添加一个新的图例,而不是更改现有的图例框import pandas as pd
import matplotlib.pyplot as plt
# To set plotting style
plotStyleDict = {'axes.titlesize' : 18,
'axes.titleweight' :'bold',
'axes.labelsize' : 15,
'lines.linewidth' : 3,
'lines.markersize' : 10,
'xtick.labelsize' : 12,
'ytick.labelsize' : 12}
plt.style.use(plotStyleDict)
# data dictionary
dataDict = {'Year': ['1st Year','2st Year','3rd Year','4th Year'],
'ERRh': [0, 0.71, 0.46, 0.35],
'HRRh': [0.0, 0.66, 0.33, 0.14],
'EREh': [0.0, 0.38, 0.20, 0.11],
'ERRc': [1.2, 1.62, 2.04, 0.04],
'EREc': [1.5, 1.4, 1.3, 1.1],
'HRRc': [1.36, 2.27, 4.83, 0.09]}
# create dataframe
dfDataTest=pd.DataFrame.from_dict(dataDict, orient='columns', dtype=None, columns=None)
dfDataTest.index = dfDataTest.Year
dfDataTest.drop('Year', inplace = True, axis=1)
print(dfDataTest)
# Bar plot the dataframe with last 3 columns being on secondary axis
ax1 = dfDataTest [['ERRh', 'HRRh','EREh','ERRc', 'EREc', 'HRRc']].\
plot(kind='bar',color=['green','darkgreen','orange','blue','red','firebrick'],
figsize=(16,6), edgecolor=['black','black','black','black','black','black'],
stacked=False, secondary_y= ['ERRc', 'EREc', 'HRRc'])
plt.xticks(rotation=30, horizontalalignment="center")
plt.title("Energy & Hydraulic Recoveries for Heating and Cooling",fontsize=18, weight='bold')
# specify left and right y labels with Greek symbols
ax1.set_ylabel(r'$\eta_{ER,h} , \eta_{HR,h} , \eta_{th,h} [-]$')
ax1.right_ax.set_ylabel(r'$\eta_{ER,c} , \eta_{HR,c} , \eta_{th,c} [-]$')
# change legends to Greek symbols
plt.legend([r'$\eta_{ER,h}$', r'$\eta_{HR,h}$', r'$\eta_{th,h}$',r'$\eta_{ER,c}$',
r'$\eta_{HR,c}$',r'$\eta_{th,c}$'],loc=2)
plt.grid(True)
plt.show()
在使用plt.legend
之前,绘图结果如下:
使用plt.legend
绘制结果如下:
我想只有一个图例框(最好是右上角的那个),所有图例都用希腊符号替换
谢谢你的帮助 如果在绘图之前重命名数据框,则更容易:
orig_cols = ['ERRh', 'HRRh','EREh','ERRc', 'EREc', 'HRRc']
rename_cols = [r'$\eta_{ER,h}$', r'$\eta_{HR,h}$', r'$\eta_{th,h}$',r'$\eta_{ER,c}$',
r'$\eta_{HR,c}$',r'$\eta_{th,c}$']
rename_dict = dict(zip(orig_cols, rename_cols))
# Bar plot the dataframe with last 3 columns being on secondary axis
ax1 = dfDataTest [orig_cols].rename(columns=rename_dict).\
plot(kind='bar',color=['green','darkgreen','orange','blue','red','firebrick'],
figsize=(16,6), edgecolor=['black','black','black','black','black','black'],
stacked=False, secondary_y= [r'$\eta_{ER,c}$',
r'$\eta_{HR,c}$',r'$\eta_{th,c}$'])
输出:
如果在绘图之前重命名数据框,则更容易:
orig_cols = ['ERRh', 'HRRh','EREh','ERRc', 'EREc', 'HRRc']
rename_cols = [r'$\eta_{ER,h}$', r'$\eta_{HR,h}$', r'$\eta_{th,h}$',r'$\eta_{ER,c}$',
r'$\eta_{HR,c}$',r'$\eta_{th,c}$']
rename_dict = dict(zip(orig_cols, rename_cols))
# Bar plot the dataframe with last 3 columns being on secondary axis
ax1 = dfDataTest [orig_cols].rename(columns=rename_dict).\
plot(kind='bar',color=['green','darkgreen','orange','blue','red','firebrick'],
figsize=(16,6), edgecolor=['black','black','black','black','black','black'],
stacked=False, secondary_y= [r'$\eta_{ER,c}$',
r'$\eta_{HR,c}$',r'$\eta_{th,c}$'])
输出:
谢谢@广黄:你知道如何为每个y轴(主轴和次轴)设置y限制吗?当我使用'plt.gca().set_ylim([0,6])时,它只为右边的次轴设置了限制,而没有为左边的主轴设置限制。我刚刚修复了它。我对左y轴使用了“ax1.set_ylim([0,1]),对右y轴使用了“ax1.right_ax.set_ylim([0,5])。您知道如何使用指定的间距和y轴刻度字体大小和重量来指定左y轴和右y轴限制吗?谢谢@广黄:你知道如何为每个y轴(主轴和次轴)设置y限制吗?当我使用'plt.gca().set_ylim([0,6])时,它只为右边的次轴设置了限制,而没有为左边的主轴设置限制。我刚刚修复了它。我对左y轴使用了“ax1.set_ylim([0,1]),对右y轴使用了ax1.right_ax.set_ylim([0,5])。您知道如何使用指定的间距和y轴刻度字体大小和重量来指定左y轴和右y轴限制吗?