概述:Python画图实践:plotly、matplotlib、seaborn、pyechart
plotly
Install
1 | pip install plotly |
折线图
导入相应的库文件
1 | import plotly |
数据读取展示
1 | nz_weather = pd.read_csv("plotly-datasets/nz_weather.csv") |
DATE | Auckland | Christchurch | Dunedin | Hamilton | Wellington | |
---|---|---|---|---|---|---|
0 | 2000-01 | 115.4 | 47.2 | 174.8 | 96.2 | 91.8 |
1 | 2000-02 | 8.4 | 25.2 | 41 | 8.2 | 35.2 |
2 | 2000-03 | 57.2 | 60.8 | 74.2 | 33.8 | 53.4 |
3 | 2000-04 | 106.8 | 58.2 | 50 | 129.6 | 109.8 |
4 | 2000-05 | 128.2 | 62.0 | ‘- | 98.2 | 78.2 |
1 | line1 = go.Scatter(x=nz_weather['DATE'],y=nz_weather['Auckland'],name='Auckland') |
散点图
数据准备
1 | iris = pd.read_csv("plotly-datasets/iris.csv") |
SepalLength | SepalWidth | PetalLength | PetalWidth | Name | |
---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | Iris-setosa |
1 | 4.9 | 3.0 | 1.4 | 0.2 | Iris-setosa |
2 | 4.7 | 3.2 | 1.3 | 0.2 | Iris-setosa |
3 | 4.6 | 3.1 | 1.5 | 0.2 | Iris-setosa |
4 | 5.0 | 3.6 | 1.4 | 0.2 | Iris-setosa |
1 | scatter = go.Scatter(x=iris['SepalLength'],y=iris['SepalWidth'],mode='markers',marker={'size':10},name='散点类别')# 默认为线连接 |
对不同类别标记不同的颜色,而plotly不支持字符串形式的类别名,因此需要将类别转换为数字
1 | iris.groupby('Name').count().index |
1 | iris.head() |
SepalLength | SepalWidth | PetalLength | PetalWidth | Name | color | |
---|---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | Iris-setosa | 0 |
1 | 4.9 | 3.0 | 1.4 | 0.2 | Iris-setosa | 0 |
2 | 4.7 | 3.2 | 1.3 | 0.2 | Iris-setosa | 0 |
3 | 4.6 | 3.1 | 1.5 | 0.2 | Iris-setosa | 0 |
4 | 5.0 | 3.6 | 1.4 | 0.2 | Iris-setosa | 0 |
1 | scatter = go.Scatter(x=iris['SepalLength'],y=iris['SepalWidth'],mode='markers',marker={'color':iris['color']})# 默认为线连接 |
使用plotly.express实现散点图(express是用更简短的语句实现)
1 | import plotly.express as px |
使用scatter_matrix实现对多个组合散点图可视化
1 | fig = px.scatter_matrix(iris,dimensions=['SepalLength','SepalWidth','PetalLength','PetalWidth'],color='Name') |
3D散点图
数据准备
1 | threedline = pd.read_csv('plotly-datasets/3d-line1.csv') |
x | y | z | color | |
---|---|---|---|---|
0 | 100.000000 | 0.613222 | 0.734706 | 0 |
1 | 99.238875 | 0.589852 | 0.781320 | 0 |
2 | 99.559608 | 0.599743 | 0.762566 | 0 |
3 | 97.931425 | 0.549296 | 0.859966 | 0 |
4 | 96.837832 | 0.515613 | 0.927150 | 0 |
1 | line = go.Scatter3d(x=threedline['x'],y=threedline['y'],z=threedline['z'],mode='markers',marker={'size':3,'color':'green'}) |
1 | fig = px.scatter_3d(threedline,x='x',y='y',z='z',color='color') |
柱状图
1 | bar = go.Bar(x=nz_weather['DATE'],y=nz_weather['Auckland'],text=nz_weather['Auckland'],textposition='outside') |
动态柱状图
1 | import plotly.express as px |
直方图
1 | hist = go.Histogram(x=nz_weather['Auckland'],xbins={'size':10})# 每区间范围为10 |
拼状图
1 | labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen'] |
手抄
官网帮助文档:https://plotly.com/python/#fundamentals
在线制作网站:https://chart-studio.plotly.com/
matplotlib
基础知识:
axex: 设置坐标轴边界和表面的颜色、坐标刻度值大小和网格的显示
backend: 设置目标暑促TkAgg和GTKAgg
figure: 控制dpi、边界颜色、图形大小、和子区( subplot)设置
font: 字体集(font family)、字体大小和样式设置
grid: 设置网格颜色和线性
legend: 设置图例和其中的文本的显示
line: 设置线条(颜色、线型、宽度等)和标记
patch: 是填充2D空间的图形对象,如多边形和圆。控制线宽、颜色和抗锯齿设置等。
savefig: 可以对保存的图形进行单独设置。例如,设置渲染的文件的背景为白色。
verbose: 设置matplotlib在执行期间信息输出,如silent、helpful、debug和debug-annoying。
xticks和yticks: 为x,y轴的主刻度和次刻度设置颜色、大小、方向,以及标签大小。
绘图过程涉及中文/负号:
步骤一:打开设置文件
1 | import matplotlib |
会显示matplotlibrc文件的地址
步骤二:修改matplotlibrc文件
将文件中的
1 | #font.family: sans-serif |
去掉注释,修改为
1 | font.family: Microsoft YaHei |
可显示为中文
1 | plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 |
图部分名称:
折线图
(1)导入库
1 | import matplotlib.pyplot as plt |
(2)生成数据
1 | x= range(100) |
(3)绘图
1 | plt.plot(x, y, linewidth=1, label = "test", color='red', linestyle=':', marker='|') |
其中:
linestyle可选参数:
1 | '-' solid line style |
marker可选参数:
1 | '.' point marker |
颜色参考:
另一例子:
1 | # 生成数据集 |
子图例子:
1 | import matplotlib.pyplot as plt |
柱状图
(1)导入库
1 | import numpy as np |
(2)生成数据
1 | population_ages = np.random.rand(50)*50 |
(3)绘图
1 | # 绘制直方图 |
另一例子:
1 | n = 12 |
饼图
1 | # 设置内容列表 |
散点图
1 | # mean: 0 ; std: 1 ; num: n |
3D散点:
1 | # 创建数据集 |
等高线图
1 | # 绘制等高线函数 |
添加标签:
1 | # 绘制黑白类型的等高线 |
3D平面图
1 | # 设置画布 |
seaborn
参考文档:http://seaborn.pydata.org/index.html
热力图
(1)导入库
1 | import numpy as np |
(2)生成数据
1 | np.random.seed(0)# 设置相同种子以生成相同的随机数 |
(3)绘图
1 | plt.figure(figsize=(10, 8))# 设置画布大小 |
(4)结合公开数据集绘图
1 | flights = sns.load_dataset("flights")# 加载数据 |
若以上图片出现显示不全,原因在于matplotlib版本问题,安装3.1.0即可解决:
1 | pip install matplotlib==3.1.0 |
切换风格:
1 | ax = sns.heatmap(flights, cmap="YlGnBu") |
联合分布图
(1)导入库
1 | import tushare as ts |
(2)生成数据
1 | stockdata = ts.get_k_data('000001') |
(3)绘图
1 | sns.jointplot("open", "close", stockdata) |
其中可以添加回归属性:
1 | sns.jointplot("open", "close", stockdata, kind='reg') |
多变量图
(1)导入库
1 | import matplotlib.pyplot as plt |
(2)生成数据
1 | from sklearn.datasets import load_iris |
查看数据属性:
1 | irisdata.columns |
1 | ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)','petal width (cm)', 'labels'] |
(3)绘图
1 | sns.set()#使用默认配色 |
设置调色板:
1 | sns.pairplot(irisdata,hue="labels", palette="husl") |
添加回归设置:
1 | sns.pairplot(irisdata,hue="labels", palette="husl",kind="reg") |
指定变量:
1 | sns.pairplot(irisdata, vars=["sepal length (cm)", "sepal width (cm)"],hue="labels",palette="husl") |
箱体图
(1)导入库
(2)使用iris数据
(3)绘图
1 | sns.boxplot(x = irisdata["labels"],y = irisdata["sepal length (cm)"]) |
pyechart
参考文档:https://pyecharts.org/#/zh-cn/quickstart
查看库版本
1 | import pyecharts |
柱状图
1 | from pyecharts.charts import Bar |
其中,render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件,也可以传入路径参数,如 bar.render(“mycharts.html”)
上述绘制方法也支持链式调用,同时可以使用options添加主副标题等操作
1 | from pyecharts.charts import Bar |
多变量柱状图:
1 | from pyecharts.charts import Bar |
多变量横向展示(从右往左):
1 | from pyecharts import options as opts |
折线图
1 | import pyecharts.options as opts |
K线图
1 | from pyecharts import options as opts |
调整主题颜色:
1 | from pyecharts import options as opts |
实践
绘制ROC
1 | from sklearn.datasets import load_digits |
绘制混淆矩阵
1 | from sklearn.ensemble import RandomForestClassifier |
卡尔曼滤波
1 | import numpy as np |