python组合图绘制
疫情严重,在家看论文,突然发现了一种组合的图像挺有意思,记录在此。本次绘制利用python进行,主要绘制两张图。先让我们看看效果。
柱状累计图与折线图的绘制
主要用到的库有pandas、numpy、matplotlib、seaborn。
首先,导入包,对图像风格和字体做一定调整,由于是英文论文中的图,所以选用Times New Roman字体。然后对输出图像大小进行调整,由于画的图的x轴为月份,所以预先给定,最后导入y数据。
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
from pylab import *
sns.set(style="ticks")
mpl.rcParams['font.sans-serif'] = ['Times New Roman'] # 调整图像字体
# Initialize the matplotlib figure
f, ax = plt.subplots(figsize=(10,6))
x = np.array([1,2,3,4,5,6,7,8,9,10,11,12])
# Load the example car crash dataset
data = pd.read_excel(r"E:\python idea\photo\tu.xlsx",sheet_name="张掖配水")
data2 = pd.read_excel(r"E:\python idea\photo\tu.xlsx",sheet_name="临高配水")
data3 = pd.read_excel(r"E:\python idea\photo\tu.xlsx",sheet_name="临高最终")
data4 = pd.read_excel(r"E:\python idea\photo\tu.xlsx",sheet_name="张掖最终")
data5 = pd.read_excel(r"E:\python idea\photo\tu.xlsx",sheet_name="梨园河最终")
data6 = pd.read_excel(r"E:\python idea\photo\tu.xlsx",sheet_name="莺落峡")
data7 = pd.read_excel(r"E:\python idea\photo\tu.xlsx",sheet_name="正义峡")
- 堆叠图1
接下来绘制堆叠图的第一个部分。seaborn和matplotlib的绘制原理不同,seaborn绘制时需要把柱状堆叠图的数据先加起来,绘制一个总量的图,然后采用浅色进行修饰,以便和第二个部分的柱状图进行区分,因为第二个堆叠图的起点和第一个是一样的。而matplotlib则是采用相加的方式,也就是第二个部分的堆叠图是画在第一个部分结束的位置上的。两种方法效果相同,seaborn比matplotlib更简洁,但是在叠加折线图时不太好用,所以我选择了matplotlib进行组合图绘制,如果只绘制堆叠图,则利用seaborn即可。
plt.gca().twinx #组合图绘制需要,先抓一个子图
# Plot the total crashes
# 1. 绘制第一部分
# 第一个为seaborn绘制,比较简单,palette为选取调色板,hue为数据分类,saturation为饱和度,这个代码绘制出来的是总量。由于seaborn不能控制x的位置,所以再叠加折线图比较麻烦(暂时没找到办法)
# sns.barplot