数据图|绘制具有颜色映射的柱状图 (Python)
来自:幸会🍊
还是某种意义上的复现,参考了这篇论文中的图:https://doi.org/10.1016/j.jclepro.2019.118558。这张图调整了字体和颜色。具有颜色映射的柱状图,或者称为热力柱状图,它所表达的信息并没有增加,颜色和柱子高度都用于表达值的大小。它的优点在于,相比于单一颜色的柱状图更加直观,也更加复杂 (这个复杂程度刚刚好。
图的最终效果:

原图:

代码:
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
# 设置主题和字体
sns.set_theme(style="white")
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['font.weight'] = 'bold'
#载入数据
data = {
'Importance': [0.1, 0.2, 0.55, 0.64, 0.71, 0.55, 0.3, 0.35, 0.25, 0.4],
'Feature': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
}
df = pd.DataFrame(data)
#设置参数
alpha_plot = 1
alpha_line = 0.4
width = 2
textFS = 18
ticksFS = 14
legendFS = 16
# 设置颜色条的上下边界值
vmin = 0 # 最小值
vmax = df['Importance'].max()
# 设置颜色映射
norm = plt.Normalize(vmin, vmax)
sm = plt.cm.ScalarMappable(cmap="YlGnBu_r", norm=norm)
sm.set_array([])
# 创建柱状图
fig, ax = plt.subplots(figsize=(16, 6))
bars = ax.bar(df['Feature'], df['Importance'], color=sm.to_rgba(df['Importance']),
edgecolor='black', linewidth=width #柱子边框
)
# 添加颜色条
cbar = plt.colorbar(sm)
# 设置颜色条的字体大小
cbar.set_label('', fontsize=ticksFS, fontweight='bold')
cbar.ax.yaxis.set_tick_params(labelsize=ticksFS)
# 设置标签和刻度
ax.set_ylabel('Importance of factors', fontsize=textFS, fontweight='bold')
ax.set_xlabel('', fontsize=textFS, fontweight='bold')
ax.tick_params(axis='x', labelsize=ticksFS)
ax.tick_params(axis='y', labelsize=ticksFS)
#去除坐标轴边框
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['bottom'].set_color('black') # 底部边框颜色
plt.grid(linestyle='--', alpha=alpha_line, color="black") #网格
# 调整边距
plt.subplots_adjust(bottom=0.1, right=1)
plt.show()
最新讨论 ( 更多 )
- Q&A|请问这种图用什么工具实现呢 (momo)
- 其他|在逛哈组的时候发现一个科研绘图的网站 (momo)
- Q&A|请问这种桑基图是用什么软件画的呢? (拓跋令狐🌙)
- Q&A|想知道这种流程图是用啥画的 (威士忌的碎冰)
- Q&A|请问像这种配色可以用python画出来吗 (tren)