Plotnine
plotnine主张模块间的协调与分工,整个plotnine的语法如下:主要包括数据绘图、美化细节
采用图层的设计,有利于使用结构化思维实现数据可视化;
有明确的起始(ggplot()开始)与终止;
图层之间叠加是靠+实现,越往后,其图层越在上方;
一个geomxx()函数或statxx()函数可以绘制一个图层;
将表征数据和图形细节分开,能快速将图形表现出来,使创造性的绘图更加容易实现。
通过stat_xx()将常见的统计变换融入绘图中;
plotnine包
使用pip install plotnine 安装;
使用from plotnine import *导入;
使用from plotnine data import * 导入plotnine包自带的数据集;
plotnine绘图基本语法结构
ggplot():底层绘图函数;
Data为数据集,主要是数据框( data.frame)格式的数据集;
Mapping表示变量映射,用来表示变量X和Y,还可以用来控制颜色(color)、大小(size)、形状(shape);
geomxx()|statxx():几何图层或统计变换;
比如常见的:
散点图geompoint()
柱形图geombar()
直方图geomhistogram()
箱形图geomboxplot()
折线图geom_line()等
通常使用geom_xx()可以绘制大部分图表,有时候通过设定stat参数实现统计变换;
plotnine中可选的图表输入信息包括:
主要用于实现对于图表的美化和变换等;
scale_xx():度量调整,调整具体的度量:
颜色(color)、大小(size)、形状(shape);
与mapping的映射变量相对应;
coord_xx():笛卡尔坐标系;
plotnine无法实现极坐标系和地理空间坐标系;
facet_xx():分面系统,将某个变量进行分面变换;
包括俺行、列或网格等形式分面绘图;
guides():图例调整,主要包括连续型和离散型两种类型的图例;
theme():主题设定,主要调整图表的细节,包括图表背景颜色、网格线的间隔与颜色;
plotnline绘图函数分类
美学参数映射
plotnine可作为变量的美学映射参数包括:
color/col/colour、fill和alpha;
属性都是与颜色相关的美学参数;
color/col/colour是点(point)、线(line)和填充区域(region)轮廓的颜色;
fill是指定填充区域(region)的颜色;
alpha是指定颜色的透明度,数值范围是从0(完全透明)到1(不透明);
size:
点(point)的尺寸或线的(line)宽度,默认单位为mm,可以在geom_point()函数绘制的散点图基础上,添加size的映射,从而实现气泡图;
angle:
角度,只有部分几何对象有;
geomtext()函数中文本的摆放角度、geomspoke()函数中短棒摆放角度;
vjust和hjust;
与位置调整有关的美学参数;
vjust--垂直位置微调,在(0,1)区间的数字;
位置字符串:0="buttom",0.5="middle",1="top",区间外的数字微调比例控制不均;
hjust---水平位置微调,在(0,1)区间的数字;
位置字符串:0="buttom",0.5="middle",1="top",区间外的数字微调比例控制不均:
linetype:
指定线条的类型;
白线 0="blank";
实线 1="solid";
短虚线 2="dashed";
点线 3="dotted";
点横线 4="dotdash";
长虚线 5="longdash";
短长虚线 6="twodash";
shape:
指点(point)的形状;
为[0,25]区间的26个整数,分别对应方形、圆形、三角形、菱形等26种不同形状;
plotnine常见函数的主要美学映射参数
plotnine用例:
import pandas as pd
import numpy as np
from plotnine import *
#from plotnine.data import *
import matplotlib.pyplot as plt
import matplotlib
#plt.rc('font',family='Times New Roman')
matplotlib.rcParams['font.family'] = 'Times New Roman'
df=pd.read_csv("d:/python/out/FacetD.csv")
#age映射到点的大小size--
p1=(ggplot(df, aes(x='SOD',y='tau',size='age')) +
geom_point(shape='o',color="black",
fill="#336A97",stroke=0.25,alpha=0.8)+
theme(text=element_text(size=12,colour = "black"),
aspect_ratio =1,
dpi=100,
figure_size=(4,4))) #shape=21,color="black",fill="red",size=3,stroke=0.1
print(p1)
#p1.save("plotnine1.pdf")
age映射到点的大小size和填充颜色fill
import pandas as pd
import numpy as np
from plotnine import *
#from plotnine.data import *
import matplotlib.pyplot as plt
import matplotlib
#plt.rc('font',family='Times New Roman')
matplotlib.rcParams['font.family'] = 'Times New Roman'
df=pd.read_csv("d:/python/out/FacetD.csv")
#-age映射到点的大小size和填充颜色fill
p2=(ggplot(df, aes(x='SOD',y='tau',size='age',fill='age')) +
geom_point(shape='o',color="black",stroke=0.25, alpha=0.8)+
#scale_fill_distiller(type='seq', palette='blues') +
theme(text=element_text(size=12,colour = "black"),
aspect_ratio =1,
dpi=100,
figure_size=(4,4))) #shape=21,color="black",fill="red",size=3,stroke=0.1
print(p2)
#p2.save("plotnine2.pdf")
age和Class分别映射到点的大小size和颜色fill
import pandas as pd
import numpy as np
from plotnine import *
#from plotnine.data import *
import matplotlib.pyplot as plt
import matplotlib
#plt.rc('font',family='Times New Roman')
matplotlib.rcParams['font.family'] = 'Times New Roman'
df=pd.read_csv("d:/python/out/FacetD.csv")
#age和Class分别映射到点的大小size和颜色fill--
p4=(ggplot(df, aes(x='SOD',y='tau',size='age',fill='Class')) +
geom_point(shape='o',colour="black",stroke=0.25, alpha=0.8)+
#scale_fill_hue(s = 0.90, l = 0.65, h=0.0417,color_space='husl')+
theme(text=element_text(size=12,colour = "black"),
aspect_ratio =1,
dpi=100,
figure_size=(4,4))) #shape=21,color="black",fill="red",size=3,stroke=0.1
print(p4)
p4.save("plotnine4.pdf")
文件比较
今天需要比较两个excel文件,因此就用difference函数完成文件比较。
#文件比较
import pandas as pd
df1=pd.read_csv('d:/python/out/cut628a_out.csv',encoding='utf8')
df2=pd.read_csv('d:/python/out/cut628b_out.csv',encoding='utf8')
s1=set([tuple(values) for values in df1.values.tolist()])#将数据帧转换为集合
s2=set([tuple(values) for values in df2.values.tolist()])
s1.symmetric_difference(s2)#检查s1和s2的区别
print (pd.DataFrame(list(s1.difference(s2))),'\n')
print (pd.DataFrame(list(s2.difference(s1))),'\n')
文件合并
#合并文件
import pandas as pd
df1=pd.read_csv('d:/python/out/cut628a_out.csv',encoding='utf8')
df2=pd.read_csv('d:/python/out/cut628b_out.csv',encoding='utf8')
result=pd.concat([df1,df2])
print(result)
学习小结:今天学习plotnine绘图基本语法框架,并通过案例了解不同的美学参数映射效果。