Python 如何使用其他列中的值注释条形图

Python 如何使用其他列中的值注释条形图,python,pandas,matplotlib,seaborn,Python,Pandas,Matplotlib,Seaborn,我用一个双栏图来比较每条赛道的总到达距离。由于一组的总到达距离明显大于第二组,我决定创建另一列,total reach-log(x),这只是原始total reach的np.log。y轴反映了日志的比例,但我想用总到达量中的实际值对条形图进行注释 你知道怎么做吗 import seaborn as sns import matplotlib.pyplot as plt #plot a bar graph and assign track name variable to hue double_

我用一个双栏图来比较每条赛道的总到达距离。由于一组的总到达距离明显大于第二组,我决定创建另一列,
total reach-log(x)
,这只是原始
total reach
的np.log。y轴反映了日志的比例,但我想用
总到达量
中的实际值对条形图进行注释

你知道怎么做吗

import seaborn as sns
import matplotlib.pyplot as plt

#plot a bar graph and assign track name variable to hue
double_plot = sns.barplot(
    x='date',
    y='total reach - log(x)',
    hue='track name',
    data=dflog,
    palette=['blue','red'],
    alpha=1,
    dodge=True,
)
double_plot.set_ylim(0,dflog['total reach - log(x)'].max())

for item in double_plot.get_xticklabels():
    item.set_rotation(45)
    

for p in double_plot.patches:
    double_plot.annotate(format(p.get_height(), '.0f'), 
                   (p.get_x() + p.get_width() / 2., p.get_height()), 
                   ha = 'center', va = 'center', 
                   xytext = (0, 9), 
                   textcoords = 'offset points')
fig = plt.gcf()
fig.set_size_inches(15,7)
plt.title("Total Followers - log(x) - Fleetwood Mac's Dreams")

您可以取高度的反对数,以恢复原始数字。假设使用了自然对数,则逆数为
exp
。(或当对数使用另一个基数时,
base**height

就我个人而言,我更喜欢将
sns.barplot
的返回值命名为“ax”,以强调它是一个matplotlib ax对象,可以使用标准matplotlib函数

导入matplotlib.pyplot作为plt
从matplotlib导入日期为mdates
导入seaborn作为sns
作为pd进口熊猫
将numpy作为np导入
dflog=pd.DataFrame()
dflog['date']=pd.to_datetime(np.repeat(pd.date_范围('20200901',freq='D',periods=20),2))
dflog['total reach-log(x)]=np.random.uniform(0,17,40)
dflog['track name']=np.tile(['track 1','track 2'],20)
ax=sns.barplot(
x='date',
y='total reach-log(x)',
hue='track name',
数据=数据日志,
调色板=[“蓝色”、“红色”],
α=1,
道奇(真)
ax.set_ylim(0,dflog['total reach-log(x)').max()*1.15)
对于ax.Getxticklabels()中的项:
项目。设置旋转(45)
对于ax.patches中的p:
ax.annotate(格式为np.exp(p.get_height()),“.0f”),
(p.get_x()+p.get_width()/2.,p.get_height()),
哈class='center',瓦class='center',
xytext=(0,9),
textcoords='offset points')
ax.xaxis.set\u major\u格式化程序(mdates.DateFormatter(“%y-%m-%d”))
图=plt.gcf()
图设置尺寸英寸(15,7)
ax.设置标题(“测试”)
plt.紧_布局()
plt.show()


另一种方法是在任何地方使用原始值(不带对数),并将对数刻度设置为y轴:
ax。set_yscale('log')

您可以取高度的反对数以获取原始数字。假设使用了自然对数,则逆数为
exp
。(或当对数使用另一个基数时,
base**height

就我个人而言,我更喜欢将
sns.barplot
的返回值命名为“ax”,以强调它是一个matplotlib ax对象,可以使用标准matplotlib函数

导入matplotlib.pyplot作为plt
从matplotlib导入日期为mdates
导入seaborn作为sns
作为pd进口熊猫
将numpy作为np导入
dflog=pd.DataFrame()
dflog['date']=pd.to_datetime(np.repeat(pd.date_范围('20200901',freq='D',periods=20),2))
dflog['total reach-log(x)]=np.random.uniform(0,17,40)
dflog['track name']=np.tile(['track 1','track 2'],20)
ax=sns.barplot(
x='date',
y='total reach-log(x)',
hue='track name',
数据=数据日志,
调色板=[“蓝色”、“红色”],
α=1,
道奇(真)
ax.set_ylim(0,dflog['total reach-log(x)').max()*1.15)
对于ax.Getxticklabels()中的项:
项目。设置旋转(45)
对于ax.patches中的p:
ax.annotate(格式为np.exp(p.get_height()),“.0f”),
(p.get_x()+p.get_width()/2.,p.get_height()),
哈class='center',瓦class='center',
xytext=(0,9),
textcoords='offset points')
ax.xaxis.set\u major\u格式化程序(mdates.DateFormatter(“%y-%m-%d”))
图=plt.gcf()
图设置尺寸英寸(15,7)
ax.设置标题(“测试”)
plt.紧_布局()
plt.show()

另一种方法是到处使用原始值(不带log),并将logscale设置为y轴:
ax。set_yscale('log')