赞
踩
一,数据导入
这样的数据格式
- import matplotlib.pyplot as plt
- import numpy as np
- import pandas as pd
- import scipy
-
- #读取数据
- df = pd.read_excel("data.xlsx")
-
二,处理数据
- #分别读取数据,将其转化为数据框
- x_title = df.title.dropna().tolist() #转化为列表
- color = df.color.dropna().tolist()
- data = []
- for i in range(len(x_title)):
- value = "value{}".format(i + 1)
- value = df[value].dropna().tolist()
- data.append(value)
-
- #输出
- ['Control', 'ISO', 'ISO+6VT', 'ISO+12VT', 'ISO+24VT'] #x_title
- ['#B09C85', '#DC0000', '#00A087', '#3C5488', '#770335'] #color
- [[17.2, 17.9, 16.1], [31.7, 32.7, 33.8], [23.4, 24.9, 24.5], [20.1, 21.3, 20.7], [18.3, 19.9, 18.6]]#data
三,柱状图
- #柱状图数据前处理
- x = np.linspace(1, len(x_title), len(x_title)) #分类先设置为整数,便于后期优化
- mean = []
- std = []
- data = np.array(data)
- for i in data:
- mean.append(i.mean())#平均值
- std.append(i.std())#标准差
-
- ax.bar(x, mean, color='white', edgecolor=color, linewidth=1)
四,误差棒
- #一个一个添加误差棒
- for i in range(len(x_title)):
- ax.errorbar(x[i], mean[i], yerr=std[i], ecolor=color[i], elinewidth=1, capsize=15, capthick=1)
五,横坐标转化
- majorLocator = FixedLocator(x)
- minorLocator = AutoMinorLocator(len(x_title)-1)
-
- ax.xaxis.set_major_locator(majorLocator)
- ax.set_xticklabels(x_title)
- #在前面需要导入相关包, 主要作用是将x轴调均匀, 然后改变 相应位置的值
六,#标注p值,plt_p函数是统计两组数据之间的p值
- #标注p值,plt_p函数是统计两组数据之间的p值
- def plt_p(a, b, c):
- x1 = [x[a]+0.05, x[b]-0.05]
- x2 = (x[a]+x[b])/2.0
- y1 = [c, c]
- y2 = c + 1
- ax.plot(x1, y1, color="black", linewidth=1)
- ax.text(x2, y2, get_p_value_r(data[a], data[b]), verticalalignment='center', horizontalalignment='center', **font_style)
-
- #然后画含p的柱状图
- m = 1
- c = (data[m].mean() + data[m].std())
- plt_p(0, m, c*1.35)
- plt_p(m, 4, c*1.35)
- plt_p(m, 3, c*1.2)
- plt_p(m, 2, c*1.05)

七,美化坐标轴
- #x,y轴字体设置
- plt.setp(ax.get_xticklabels(), rotation=45, ha="right",
- rotation_mode="anchor", **font_style)
-
- yticklabel_text = ax.get_yticklabels()
- for i, j in enumerate(yticklabel_text):
- j.set_family("Arial")
- j.set_fontsize(24)
- #j.set_rotation(45)
- ax.margins(0.25)
-
- ax.spines["right"].set_visible(False)
- ax.spines["top"].set_visible(False)
- ax.spines["right"].set_linewidth(1)
- ax.spines["left"].set_linewidth(1)
- ax.tick_params(axis="y", which="major", length=12, width=1)
- ax.tick_params(axis="x", which="major", length=12, width=1)
-
-
-
- ax.set_ylim(0, 50)
- plt.savefig("柱状图.svg", format="svg")
- plt.show()

八, 最终效果图
总结, 不同的柱状图, p值处理这一块存在缺陷, 不能随机应变, 颜色这一块(可以引入其他API接口)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。