700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python成绩区间曲线图_Python重现论文图表之【包含置信区间的折线柱状图】

python成绩区间曲线图_Python重现论文图表之【包含置信区间的折线柱状图】

时间:2023-07-21 11:56:47

相关推荐

python成绩区间曲线图_Python重现论文图表之【包含置信区间的折线柱状图】

什么叫【包含置信区间的折线柱状图】?因为图有点复杂,实在不知道应该叫什么名字好。。

图片

今天导师发来一张图片,就是下面这张,是一篇论文中的插图,他说这张图片画的挺漂亮,想让我用python模仿一下。

首先分析一下这张图分为柱状图3组和折线图3组,共六组数据,其中每根折线都有上下的置信区间,此外还有横轴标题、纵轴标题和图例。

尝试

这张图是我用python的matplotlib包画的,除了最外层的纵向彩色坐标轴以及横坐标轴上的红色字体,其他都已实现,接下来将详细讲解绘图过程。

代码

首先导入必要的包pandas、matplotlib和numpy,数据集stock.csv我会放在文末供大家练习。数据集的第一行是没有标题的,因此header=None,将6列数据分别命名为'bar1', 'bar2', 'bar3', 'line1', 'line2', 'line3'.

import pandas as pd

import matplotlib.pyplot as plt

import numpy as np

jddf = pd.read_csv('stock.csv', sep=',', header=None,

names=['id', 'time', 'bar1', 'bar2', 'bar3', 'line1', 'line2', 'line3'])

设置X轴为1至16的十六个整数数字,y2, y2, y3分别在柱状图中使用,index列表示X轴的坐标文字。

# 设置X轴和Y轴取值

x = np.arange(1,17)

y1 = jddf['bar1']

y2 = jddf['bar2']

y3 = jddf['bar3']

index = jddf['id'].tolist()

绘制柱状图:

在color设置部分,三个数字/256分别是颜色所对应的RGB的三个数字。想要获得和原图一样的配色,我的做法是,用Windows自带的画图工具打开,然后取色笔工具获取颜色的RGB三个数字。

# 柱形图

plt.figure(figsize=(14,4))

bar_width = 0.2 # 设置柱状图的宽度

bar1 = plt.bar(x-bar_width, y1, bar_width, color=(0/256, 114/256, 189/256))

bar2 = plt.bar(x, y2, bar_width, color=(217/256, 83/256, 25/256))

bar3 = plt.bar(x+bar_width, y3, bar_width, color=(237/256, 177/256, 32/256))

绘制折线图及其置信区间:

我们通过一张表来看各参数的用法:

更过细节用法可以参考Matplotlib的官方文档,这里有个更大更详细的表格。

# 折线图

line1, = plt.plot(np.arange(1,17), jddf['line1'], color='purple', lw=0.5, ls='-', marker='o', ms=4)

line2, = plt.plot(np.arange(1,17), jddf['line2'], color='green', lw=0.5, marker='^', ms=4)

line3, = plt.plot(np.arange(1,17), jddf['line3'], color='blue', lw=0.5, ls='-.', marker='s', ms=4)

# 折线图置信区间

plt.fill_between(np.arange(1,17), jddf['line1'] - 2, jddf['line1'] + 2, color=(229/256, 204/256, 249/256), alpha=0.9)

plt.fill_between(np.arange(1,17), jddf['line2'] - 2, jddf['line2'] + 2, color=(204/256, 236/256, 223/256), alpha=0.9)

plt.fill_between(np.arange(1,17), jddf['line3'] - 2, jddf['line3'] + 2, color=(191/256, 191/256, 255/256), alpha=0.9)

设置X,Y轴的文字和图例,因为X轴文字较长所以要旋转一下,且以文字最右端对其柱状图中的数据点。

最后保存图片的时候,如果你用的是Jupyter Notebook你能看到画质实在感人。要想使保存的图片足够清楚就要使用savefig()函数来设置保存的dpi数值,但是该函数一定要放在plt.show()之前,否则画出的图是空白的。

# X轴和y轴坐标文字设置

plt.xticks(rotation=20)

plt.xticks(x,index, horizontalalignment='right')

plt.ylabel('Contributions to toal aviation emission(%)')

# 图例设置

plt.legend([bar1, bar2, bar3, line1, line2, line3], ["Aviation BC number emission", "Aviation BC mass emission", "Aviation fuel consumption", "Geometric mean diameter(GMD)", "Geometric standard deviation(GSD)", "Average fleet EI(BC)"], loc='upper right')

# 保存数据并画图

plt.savefig("temp.png",dpi=500,bbox_inches = 'tight')#解决图片不清晰,不完整的问题

plt.show()

获取本文中所使用的jupyter notebook代码及stock.csv数据集,请关注下方微信公众号。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。