python绘图 科研作图 常用函数 方法
总结一些python绘图方法。python绘图有一个强大的库工具:matplotlib.
导入画图工具代码:
import matplotlib.pyplot as plt
一.散点图
- 函数功能:散点图,寻找两个变量之间的关系
- plt.scatter(x, y, s=20, c=None, marker=‘o’, cmap=None, norm=None, alpha=None, linewidths=None, edgecolors=None
- 参数说明:
x: 指定散点图的x轴数据
y: 指定散点图的y轴数据
s: 指定散点图点的大小,默认为20,通过新传入的变量,实现气泡图的绘制
c: 指定散点图点的颜色,默认为蓝色
marker: 指定散点图点的形状,默认为圆形
cmap: 指定色图,只有当c参数是一个浮点型的数组时才起作用
norm: 指定数据亮度, 标准化到0~1之间,使用该参数仍需要c为浮点型的数组
vmin、vmax: 亮度设置,与norm类似,如果使用了norm则该参数无效
alpha: 设置散点的透明度
edgecolors: 设置散点边界线的颜色
linewidths: 设置散点边界线的粗细
cmap和c
cmap和c配合使用。
参数c可以是一个序列,如:plt.scatter(a,b,c=['b','r','b','r','b'],s=80),则图中5个散点依次颜色为蓝、红、蓝、红、蓝。
此时c的序列是一个颜色序列,除了上述的简洁写法,还可以使用RGB或RBGA:plt.scatter(a,b,c=['#f00','#0f0','#f00','#0f0','#f00'],s=80)
上面的例子是将参数c设置为颜色序列,但是一般我们用来做分类的数据Y是整数0,1,2,.......,等等。此时就需要配合cmap参数来使用了。如:
-
a = np.array([1,2,3,4,5])
-
b= np.array([6,7,8,9,10])
-
c = np.array([0,1,2,3,4])
-
plt.scatter(a,b,c=c,s=80,cmap=plt.cm.Spectral)
其结果:
在这里需要注意的是,plt.cm.Spectral是一个颜色映射集,但是,并不是说0~5各代表了某个颜色。而是说,参数c的序列中出现了5个不同的值,然后为每一个值分配一个颜色。
常见的颜色集有:
1. cmap=plt.cm.Spectral
效果示意:
2.cmap=plt.cm.cool
效果示意:
3.cmap=plt.cm.spring
效果示意:
4.cmap=plt.cm.Paired
效果示意:
5.cmap=plt.cm.plasma
效果示意:
6.cmap=plt.cm.PuBu
效果示意:
marker参数可指定值:
edgecolor
颜色字符 | 说明 | 颜色字符 | 说明 |
---|---|---|---|
‘b’ | 蓝色 | ‘m’ | 洋红色 |
‘g’ | 绿色 | ‘y’ | 黄色 |
‘r’ | 红色 | ‘k’ | 黑色 |
‘c’ | 青绿色 cyan | ‘w’ | 白色 |
‘#008000’ | RGB某颜色 | ‘0.8’ | 灰度值字符串 |
二.热度图
- plt.matshow(Mat, cmap=plt.cm.gray)
示例:
-
Mat = np.array([[ 0.1443294 -0.24518758 -0.00205106 -0.23932041 0.14199204 0.39466085
-
0.4229343 -0.2985331 0.31342949 -0.0886167 0.29671456 0.37616741
-
0.28675223]
-
[-0.48365155 -0.22493093 -0.31606881 0.0105905 -0.299634 -0.06503951
-
0.00335981 -0.02877949 -0.03930172 -0.52999567 0.27923515 0.16449619
-
-0.36490283]])
-
plt.matshow(Mat, cmap='plasma')
-
# 纵轴为主成分数
-
plt.yticks([0, 1], ['component 1', 'component 2'])
-
plt.colorbar()
-
# 横轴为原始特征数量
-
plt.xticks(range(len(wine.feature_names)), wine.feature_names, rotation=60, ha='left')
-
plt.show()
结果:
三.折线图
- plt.plot(x, y, format_string, **kwargs)
1.x为x轴数据, y为y轴数据
-
X = [[1], [4]] # 横坐标
-
y = [3, 5] # 纵坐标
-
plt.plot(X, y, c='k')
结果:
2.可传入多组x, y
-
import numpy as np
-
import pandas as pd
-
import matplotlib.pyplot as plt
-
-
x=(3,4,5)
-
y1=np.array([3,4,3])
-
y2=pd.Series([4,5,4])
-
-
plt.plot(x,y1,x,y2) # 此时x不可省略
-
plt.show()
结果:
四.子图
fig,ax = plt.subplots(nrows, ncols, figsize, sharex, sharey, squeeze, subplot_kw, gridspec_kw, fig_kw)
返回值:type(fig)是matplotlib.figure.Figure,type(ax)是numpy.ndarray;
- nrows/ncols:创建行数*列数的子图;
- figsize:指定整个画布的大小,以元组形式输入;
- sharex/sharey:是否共享x/y轴的属性; squeeze:默认True;
- subplot_kw:带有关键字的字典,该关键字传递给用于创建每个子图的add_subplot调用;
- gridspec_kw:带有关键字的字典,该关键字传递给用于创建每个子图网格的GridSpec函数;
示例:
-
# 导入数据集获取工具
-
from sklearn.datasets import fetch_lfw_people
-
# 载入人脸数据集
-
faces = fetch_lfw_people(min_faces_per_person=20, resize=0.8)
-
image_shape = faces.images[0].shape
-
# 将照片打印出来
-
fig, axes = plt.subplots(3, 4, figsize=(12, 9), subplot_kw={'xticks':(), 'yticks':()})
-
for target, image, ax in zip(faces.target, faces.images, axes.ravel()):
-
ax.imshow(image, cmap=plt.cm.gray)
-
ax.set_title(faces.target_names[target])
-
plt.show()
subplot_kw={'xticks':(), 'yticks':()}的效果是去除子图的横纵坐标轴
结果:
使用plt.subplots
函数时,可以直接在该函数内部设置子图纸信息
该函数返回两个变量,一个是Figure
实例fig,另一个 AxesSubplot
实例ax 。fig代表整个图像,ax代表坐标轴和画的子图,通过下标获取需要的子区域。
结果:
参考:https://zhuanlan.zhihu.com/p/523005023
五.等高线
plt.contourf ()
参数:
X,Y:类似数组,可选为Z中的坐标值,当 X,Y,Z 都是 2 维数组时,它们的形状必须相同。如果都是 1 维数组时,len(X)是 Z 的列数,而 len(Y) 是 Z 中的行数。(例如,经由创建numpy.meshgrid())
Z:类似矩阵绘制轮廓的高度值levels:int或类似数组,可选,确定轮廓线/区域的数量和位置
其他参数:aalpha:float ,可选
alpha混合值,介于0(透明)和1(不透明)之间。
cmap:str或colormap ,可选
Colormap用于将数据值(浮点数)从间隔转换为相应Colormap表示的RGBA颜色。用于将数据缩放到间隔中看 。
-
import numpy as np
-
import pandas as pd
-
import matplotlib.pyplot as plt
-
-
-
# 计算x,y坐标对应的高度值
-
def f(x, y):
-
return (1-x/2 x**3 y**5) * np.exp(-x**2-y**2)
-
-
# 生成x,y的数据
-
n = 256
-
x = np.linspace(-3, 3, n)
-
y = np.linspace(-3, 3, n)
-
-
# 把x,y数据生成mesh网格状的数据,因为等高线的显示是在网格的基础上添加上高度值
-
X, Y = np.meshgrid(x, y)
-
-
# 填充等高线
-
plt.contourf(X, Y, f(X, Y))
-
# 显示图表
-
plt.show()
结果:
六.分类图
matplotlib.pyplot.pcolormesh(*args,alpha=None, norm=None, cmap=None, vmin=None,
vmax=None, shading=None,antialiased=False,data=None, **kwargs)
-
from sklearn.neural_network import MLPClassifier
-
from sklearn.datasets import load_wine
-
from sklearn.model_selection import train_test_split
-
wine = load_wine()
-
X = wine.data[:, :2]
-
y = wine.target
-
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
-
mlp = MLPClassifier(solver='lbfgs')
-
mlp.fit(X_train, y_train)
-
import matplotlib.pyplot as plt
-
from matplotlib.colors import ListedColormap
-
import numpy as np
-
# 使用不同的色块表示不同的分类
-
cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
-
cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])
-
x_min, x_max = X_train[:, 0].min() - 1, X_train[:, 0].max() 1
-
y_min, y_max = X_train[:, 1].min() - 1, X_train[:, 1].max() 1
-
xx, yy = np.meshgrid(np.arange(x_min, x_max, .02),
-
np.arange(y_min, y_max, .02))
-
Z = mlp.predict(np.c_[xx.ravel(), yy.ravel()])
-
Z = Z.reshape(xx.shape)
-
plt.figure()
-
plt.pcolormesh(xx, yy, Z, cmap=cmap_light)
-
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolor='k', s=60)
-
plt.xlim(xx.min(), xx.max())
-
plt.ylim(yy.min(), yy.max())
-
plt.title("MLPClassifier: solver:lbfgs")
-
plt.show()
结果:
七.常用函数
1.图例
plt.legend()
-
import matplotlib.pyplot as plt
-
import numpy as np
-
x = np.arange(0,10,1)
-
plt.plot(x,x,'r--',x,np.cos(x),'g--',marker='*')
-
plt.xlabel('row')
-
plt.ylabel('cow')
-
plt.legend(["BJ","SH"],loc='upper left')
-
plt.show()
结果:
2.坐标轴
xlabel、ylabel: 设置横轴、纵轴标签及大小
例如plt.xlabel("csdn test", fontsize=20)xlim、ylim: 设置x、y坐标轴的起始点(从哪到哪)
例如plt.xlim(0,50) plt.ylim(0,60)xticks、yticks: 设置坐标轴刻度的字体大小
例如plt.xticks(labelsize=20)title: 设置图片的标题
例如 plt.title(“csdn test”)
3.水平/竖直线
plt.hlines水平线
plt.vlines竖直线
必须要指定xmin,xmax/ymin,ymax
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgagjhg
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24