如何设置ticklabel rotation和添加bar annotations
How to set ticklabel rotation and add bar annotations
我想绘制以下带有注释的条形图,并且我希望 x 标签保持 45 度,以便于阅读。我不确定为什么我的代码不起作用。我已将示例数据和所需的条形图添加为附件。感谢您的建议!谢谢!
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
#sns.set(rc={"figure.dpi":300, 'savefig.dpi':300})
sns.set_context('notebook')
sns.set_style("ticks")
#sns.set_style('white')
sns.set_context("paper", font_scale = 2)
colors = ['b', 'g', 'r', 'c', 'm']
#sns.set(style="whitegrid")
#sns.set_palette(sns.color_palette(colors))
#fig, (ax1,ax2) = plt.subplots(1, 2, figsize=(16, 8))
#fig.subplots_adjust(wspace=0.3)
plots1 = sns.barplot(x="Model", y="G-mean", data=df_Aussel2014_5features, ax=ax1,palette='Spectral')
# Iterrating over the bars one-by-one
for bar in plots1.patches:
# Using Matplotlib's annotate function and
# passing the coordinates where the annotation shall be done
plots1.annotate(format(bar.get_height(), '.2f'),
(bar.get_x() + bar.get_width() / 2,
bar.get_height()), ha='center', va='center',
size=10, xytext=(0, 5),
textcoords='offset points')
plt.show()
# Save figure
#plt.savefig('Aussel2014_5features.png', dpi=300, transparent=False, bbox_inches='tight')
我得到了下面的图像。
将 matplotlib.pyplot
导入为 plt
。 plt.xticks(rotation=45)
示例:
import matplotlib.pyplot as plt
plt.xticks(rotation=45)
- 您正在使用面向对象的接口(例如
axes
),所以不要混用 plt.
和 axes.
方法
seaborn.barplot
是轴级图,returns 是 matplotlib 轴,在本例中是 p1
。
- 使用
matplotlib.axes.Axes.tick_params
设置轴的旋转,或一些其他参数,如文档中所示。
- 使用
matplotlib.pyplot.bar_label
添加栏注释。
- 请参阅此 answer,了解有关使用该方法的其他详细信息和示例。
- 根据需要调整
nrow
、ncols
和figsize
,设置sharex=False
和sharey=False
。
- 在
python 3.8.12
、pandas 1.3.4
、matplotlib 3.4.3
、seaborn 0.11.2
中测试
import seaborn as sns
import matplotlib.pyplot as plot
import pandas as pd
# data
data = {'Model': ['QDA', 'LDA', 'DT', 'Bagging', 'NB'],
'G-mean': [0.703780, 0.527855, 0.330928, 0.294414, 0.278713]}
df = pd.DataFrame(data)
# create figure and axes
fig, ax1 = plt.subplots(nrows=1, ncols=1, figsize=(8, 8), sharex=False, sharey=False)
# plot
p1 = sns.barplot(x="Model", y="G-mean", data=df, palette='Spectral', ax=ax1)
p1.set(title='Performance Comparison based on G-mean')
# add annotation
p1.bar_label(p1.containers[0], fmt='%0.2f')
# add a space on y for the annotations
p1.margins(y=0.1)
# rotate the axis ticklabels
p1.tick_params(axis='x', rotation=45)
我想绘制以下带有注释的条形图,并且我希望 x 标签保持 45 度,以便于阅读。我不确定为什么我的代码不起作用。我已将示例数据和所需的条形图添加为附件。感谢您的建议!谢谢!
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
#sns.set(rc={"figure.dpi":300, 'savefig.dpi':300})
sns.set_context('notebook')
sns.set_style("ticks")
#sns.set_style('white')
sns.set_context("paper", font_scale = 2)
colors = ['b', 'g', 'r', 'c', 'm']
#sns.set(style="whitegrid")
#sns.set_palette(sns.color_palette(colors))
#fig, (ax1,ax2) = plt.subplots(1, 2, figsize=(16, 8))
#fig.subplots_adjust(wspace=0.3)
plots1 = sns.barplot(x="Model", y="G-mean", data=df_Aussel2014_5features, ax=ax1,palette='Spectral')
# Iterrating over the bars one-by-one
for bar in plots1.patches:
# Using Matplotlib's annotate function and
# passing the coordinates where the annotation shall be done
plots1.annotate(format(bar.get_height(), '.2f'),
(bar.get_x() + bar.get_width() / 2,
bar.get_height()), ha='center', va='center',
size=10, xytext=(0, 5),
textcoords='offset points')
plt.show()
# Save figure
#plt.savefig('Aussel2014_5features.png', dpi=300, transparent=False, bbox_inches='tight')
我得到了下面的图像。
将 matplotlib.pyplot
导入为 plt
。 plt.xticks(rotation=45)
示例:
import matplotlib.pyplot as plt
plt.xticks(rotation=45)
- 您正在使用面向对象的接口(例如
axes
),所以不要混用plt.
和axes.
方法 seaborn.barplot
是轴级图,returns 是 matplotlib 轴,在本例中是p1
。- 使用
matplotlib.axes.Axes.tick_params
设置轴的旋转,或一些其他参数,如文档中所示。 - 使用
matplotlib.pyplot.bar_label
添加栏注释。- 请参阅此 answer,了解有关使用该方法的其他详细信息和示例。
- 根据需要调整
nrow
、ncols
和figsize
,设置sharex=False
和sharey=False
。 - 在
python 3.8.12
、pandas 1.3.4
、matplotlib 3.4.3
、seaborn 0.11.2
中测试
import seaborn as sns
import matplotlib.pyplot as plot
import pandas as pd
# data
data = {'Model': ['QDA', 'LDA', 'DT', 'Bagging', 'NB'],
'G-mean': [0.703780, 0.527855, 0.330928, 0.294414, 0.278713]}
df = pd.DataFrame(data)
# create figure and axes
fig, ax1 = plt.subplots(nrows=1, ncols=1, figsize=(8, 8), sharex=False, sharey=False)
# plot
p1 = sns.barplot(x="Model", y="G-mean", data=df, palette='Spectral', ax=ax1)
p1.set(title='Performance Comparison based on G-mean')
# add annotation
p1.bar_label(p1.containers[0], fmt='%0.2f')
# add a space on y for the annotations
p1.margins(y=0.1)
# rotate the axis ticklabels
p1.tick_params(axis='x', rotation=45)