科研论文柱状图——Python matplotlib
本文对matplotlib库的使用进行简要介绍,并提供一些科研论文常用的绘图代码。
Matplotlib库
Matplotlib是一个强大的用于可视化的Python库,适用于各种科学计算、数据分析和工程应用领域。其使用步骤一般如下:
柱状图绘图代码及示例
- 基本柱状图
代码:
import matplotlib.pyplot as plt
# 数据
categories = ['A', 'B', 'C', 'D']
values = [4, 7, 1, 8]
# 绘制柱状图
plt.bar(categories, values)
# 添加标题和标签
plt.title('Simple Bar Chart')
plt.xlabel('Category')
plt.ylabel('Value')
# 显示图表
plt.savefig("/home/dili/draw/graphs/csdn.png")
效果:
- 修改柱状图颜色
import matplotlib.pyplot as plt
# 数据
categories = ['A', 'B', 'C', 'D']
values = [4, 7, 1, 8]
colors = ['#FFBE7A','#FA7F6F','#82B0D2','#BEB8DC']
# 绘制柱状图
plt.bar(categories, values, color=colors)
# 添加标题和标签
plt.title('Bar Chart with Colors')
plt.xlabel('Category')
plt.ylabel('Value')
# 在每个柱上添加数值标签
for i in range(len(values)):
plt.text(i, values[i] + 0.1, str(values[i]), ha='center')
# 显示图表
plt.show()
- 分组柱状图
代码:
import matplotlib.pyplot as plt
import numpy as np
# 数据
categories = ['A', 'B', 'C', 'D']
values1 = [4, 7, 1, 8]
values2 = [5, 6, 2, 7]
# 设置位置和宽度
bar_width = 0.35
index = np.arange(len(categories))
# 绘制柱状图
plt.bar(index, values1, bar_width, label='Series 1',color="#FFD9B7",edgecolor='black')
plt.bar(index + bar_width, values2, bar_width, label='Series 2',color="#D6E7B5",edgecolor='black')
# 添加标题和标签
plt.title('Grouped Bar Chart')
plt.xlabel('Category')
plt.ylabel('Value')
plt.xticks(index + bar_width / 2, categories)
plt.legend()
# 显示图表
plt.show()
效果:
注:如要增加每个组的柱状图个数,适当修改bar_width = 0.35的大小
- 分组柱状图2:每组多个,且图例在柱状图坐标轴外
代码:
import numpy as np
import matplotlib.pyplot as plt
# 数据
groups = [1, 2, 3, 4, 5]
value1 = [0.7, 0.75, 0.78, 0.8, 0.85]
value2 = [0.78, 0.8, 0.7, 0.8, 0.84]
value3 = [0.9, 0.88, 0.89, 0.90, 0.92]
value4 = [0.94, 0.94, 0.92, 0.95, 0.98]
# 绘图设置
bar_width = 0.15
index = np.arange(len(groups))
# 创建图形
plt.figure(figsize=(10, 6))
# 绘制柱状图
plt.bar(index, value1, bar_width, label='categories1', edgecolor='black', color="#FADCAA")
plt.bar(index + bar_width, value2, bar_width, label='categories2', edgecolor='black', color="#A6D0DD")
plt.bar(index + 2 * bar_width, value3, bar_width, label='categories3', edgecolor='black', color="#82A0D8")
plt.bar(index + 3 * bar_width, value4, bar_width, label='categories4', edgecolor='black', color="#CABBE9")
# 设置Y轴范围
plt.ylim(0.6, 1)
# 添加轴标签和图例
plt.xlabel('groups', fontsize=12)
plt.ylabel('values', fontsize=12)
plt.xticks(index + 2.5 * bar_width, groups, fontsize=12)
plt.legend(loc='upper center', bbox_to_anchor=(0.5, 1.15), ncol=4, fontsize=12) # 设置图例位置
# 显示图表
plt.show()
效果:
- 堆叠柱状图
代码:
import matplotlib.pyplot as plt
# 数据
categories = ['A', 'B', 'C', 'D']
values1 = [4, 7, 1, 8]
values2 = [5, 6, 2, 7]
# 绘制堆叠柱状图
plt.bar(categories, values1, label='Series 1')
plt.bar(categories, values2, bottom=values1, label='Series 2')
# 添加标题和标签
plt.title('Stacked Bar Chart')
plt.xlabel('Category')
plt.ylabel('Value')
plt.legend()
# 显示图表
plt.show()
效果:
- 柱状图填充
填充样式可分为以下几种,除了使用不同的填充样式以区分,还可以通过改变填充样式的数量改变填充密度:
代码:
import numpy as np
import matplotlib.pyplot as plt
# 数据
groups = [1, 2, 3, 4, 5]
value1 = [0.7, 0.75, 0.78, 0.8, 0.85]
value2 = [0.78, 0.8, 0.7, 0.8, 0.84]
value3 = [0.9, 0.88, 0.89, 0.90, 0.92]
value4 = [0.94, 0.94, 0.92, 0.95, 0.98]
# 绘图设置
bar_width = 0.15
index = np.arange(len(groups))
# 创建图形
plt.figure(figsize=(10, 6))
# 绘制柱状图
plt.bar(index, value1, bar_width, label='categories1', edgecolor='black', color="#FADCAA", hatch="//")
plt.bar(index + bar_width, value2, bar_width, label='categories2', edgecolor='black', color="#A6D0DD",hatch="..")
plt.bar(index + 2 * bar_width, value3, bar_width, label='categories3', edgecolor='black', color="#82A0D8",hatch="--")
plt.bar(index + 3 * bar_width, value4, bar_width, label='categories4', edgecolor='black', color="#CABBE9",hatch="\\")
# 设置Y轴范围
plt.ylim(0.6, 1)
# 添加轴标签和图例
plt.xlabel('groups', fontsize=12)
plt.ylabel('values', fontsize=12)
plt.xticks(index + 2.5 * bar_width, groups, fontsize=12)
plt.legend(loc='upper center', bbox_to_anchor=(0.5, 1.15), ncol=4, fontsize=12) # 设置图例位置
# 显示图表
plt.show()
效果:
7. 修改图中字体
英文期刊或会议论文中一般要求图中字体为Times New Roman,而matplotlib绘图时默认使用Arial字体,在Linux操作系统上修改绘图字体的步骤如下:
font_path = '/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf'
font_props = plt.matplotlib.font_manager.FontProperties(fname=font_path)
注:需要在绘图时指定字体才会生效,如:plt.xticks(index + bar_width*2.5, categories, fontproperties=font_props, fontsize=12)
作者:番茄炒西红柿炒蛋