matplotlib常规操作
1,指定图片大小和像素
Python绘图问题:Matplotlib中指定图片大小和像素
2,绘图命令的基本架构及其属性设置
3,python基础语法(二)——— plt的一些函数使用
4,统一图上所有字体
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['font.size'] = 15
统一字体
5,取消边框 plt.axis('off')
plt.axis('off')
6,保存图片不完整 plt.savefig('test.png', dpi=300, bbox_inches='tight')
在savefig多加一个参数 bbox_inches='tight' 就可以了
plt.savefig('test.png', dpi=300, bbox_inches='tight')
7,调整图例的位置及大小 plot.legend(loc=2,prop={'size':6})
matplotlib图例legend语法及设置的方法
matplotlib6 -- 添加 图例 legend
可以不用在plot()中加label=。。,直接plt.legend([...]),就可以生成对应图例
限制图例的大小
plot.legend(loc=2,prop={'size':6})
8,横坐标挤到了一起
(1) 调整字体+旋转
plt.tick_params(labelsize=13, rotation=45) 横纵坐标都调整
plt.xticks(rotation=90, fontsize=14) 只调整横坐标
(2) 调整 x 轴坐标轴密度
import matplotlib.ticker as ticker
fig, ax = plt.subplots(1, 1)
。。。
tick_spacing = 10
ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
一次python画图经历
9,python pyplot绘制并行柱状图,x轴数值显示在两个柱状图的中心
https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/114057980
10,matplotlib绘制双纵坐标图
plt.rcParams['font.family'] = 'Times New Roman'
figure, ax1 = plt.subplots()
。。。
ax2 = ax1.twinx()
。。。
https://blog.csdn.net/a486259/article/details/105027516/
11,双纵坐标图合并图例
figure, ax1 = plt.subplots()
。。。
ax2 = ax1.twinx()
。。。
leg = figure.legend(loc='upper left', prop=legendFont, fancybox=False) #figure是关键
。。。
https://www.cnblogs.com/Atanisi/p/8530693.html
12,垂直于坐标轴的图-棉棒图 plt.stem()
(markerline, stemlines, baseline) = plt.stem(x, timeMeanList, label='Mean Time', linefmt='--')
plt.setp(baseline, visible=False) #棉棒图隐藏基线
https://blog.csdn.net/weixin_41869644/article/details/107428880
13,修改刻度
https://fishc.com.cn/thread-172770-1-1.html
14,三维绘图
https://blog.csdn.net/qq_34024346/article/details/108221426
https://www.cnblogs.com/tensorzhang/p/14922023.html
https://blog.csdn.net/jasonzhoujx/article/details/81780774
https://blog.csdn.net/u014636245/article/details/82799573
https://www.cnblogs.com/xingshansi/p/6777945.html
15,subplot子图坐标轴重叠 plt.tight_layout(),subplots_adjust
- 1,在绘制完所有子图后加上以下代码:
plt.tight_layout() - 2,subplots_adjust(left=0.15,bottom=0.1,top=0.9,right=0.95,hspace=0.2,wspace=0.25)
这个函数就在pylab中,可以直接导入使用
from pylab import *
subplots_adjust(left=0.0,bottom=0.0,top=1,right=1)
for i in range(1,5):
subplot(2,2,i)
text(0.5,0.5,str(i))
show()
left,bottom,top,right四个参数用来控制上下左右的空白;注意这里面是从figure的左下角开始标记,取值从0-1;top和right的取值也是以左下角为坐标原点计数,并不是表示到最上方和最右边的比例。比如top=0.9表示给上面留下0.1的空白。wspace和hspace的分别控制子图之间的列距和行距。
16,绘制混淆矩阵以及横纵坐标显示中文 plt.imshow()
# plt.rcParams两行是用于解决标签不能显示汉字的问题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#coding=utf-8
import matplotlib.pyplot as plt
import numpy as np
confusion = np.array(([91,0,0],[0,92,1],[0,0,95]))
# 热度图,后面是指定的颜色块,可设置其他的不同颜色
plt.imshow(confusion, cmap=plt.cm.Blues)
# ticks 坐标轴的坐标点
# label 坐标轴标签说明
indices = range(len(confusion))
# 第一个是迭代对象,表示坐标的显示顺序,第二个参数是坐标轴显示列表
#plt.xticks(indices, [0, 1, 2])
#plt.yticks(indices, [0, 1, 2])
plt.xticks(indices, ['圆形', '三角形', '方形'])
plt.yticks(indices, ['圆形', '三角形', '方形'])
plt.colorbar()
plt.xlabel('预测值')
plt.ylabel('真实值')
plt.title('混淆矩阵')
# plt.rcParams两行是用于解决标签不能显示汉字的问题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 显示数据
for first_index in range(len(confusion)): #第几行
for second_index in range(len(confusion[first_index])): #第几列
plt.text(first_index, second_index, confusion[first_index][second_index])
# 在matlab里面可以对矩阵直接imagesc(confusion)
# 显示
plt.show()
17,默认配色'Cn'
https://blog.csdn.net/mighty13/article/details/113764337
默认色彩循环,Cn彩色定义:由字符串C和1个非负整数构成,数字为默认色彩循环rcParams["axes.prop_cycle"]的索引,
rcParams["axes.prop_cycle"] (default: cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])),数字超过9,对应的颜色索引为数字个位数索引,例如C101和C1的取值相同。注意C必须为大写。
'''例子1'''
import matplotlib.pyplot as plt
for i in range(20):
line = plt.plot([i, i])
c = line[0].get_color()
plt.annotate(repr(i) + ":"+c, (0, i+0.1))
plt.show()
'''例子2'''
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
tab10 = mcolors.TABLEAU_COLORS
for i,j in enumerate(tab10):
plt.plot([i, i], c=j)
plt.annotate(j+":"+tab10[j], (0, i+0.1))
plt.show()
'''例子3, 默认色彩用'C0'...,总共有10个,数字超过9,对应的颜色索引为数字个位数索引,例如C101和C1的取值相同。注意C必须为大写。'''
import matplotlib.pyplot as plt
for i in range(20):
plt.plot([i, i], c=f'C{i}')
plt.annotate(f'c{i}', (0, i+0.1))
plt.show()
18,非阻塞模式绘图(plt.pause())
- 关键:plt.cla()/plt.figure(), plt.pause(), plt.show()放在最后
- python可视化库matplotlib的显示模式默认为阻塞(block)模式;也就是在plt.show()之后,程序会暂停到那儿,并不会继续执行下去;如果需要继续执行程序,就要关闭图片。
- 那如何展示动态图或多个窗口呢?这就要使用plt.ion()这个函数,使matplotlib的显示模式转换为交互(interactive)模式。即使在脚本中遇到plt.show(),代码还是会继续执行。
- 在plt.show()之前一定不要忘了加plt.ioff(),如果不加,界面会一闪而过,并不会停留。
import matplotlib.pyplot as plt
plt.cla() #清空之前所绘制的图
plt.pause() #显示所绘制的图
'''这俩才是关键'''
import matplotlib.pyplot as plt
plt.ion() # 打开交互模式
# 同时打开两个窗口显示图片
plt.figure() #图片一
plt.imshow(i1)
plt.figure() #图片二
plt.imshow(i2)
# 显示前关掉交互模式
plt.ioff()
plt.show()
'''一个例子'''
import torch
import torch.nn as nn
from matplotlib import pyplot as plt
from tqdm import tqdm
import math
dataIn = torch.randn(1, 1000)
dataTarget = torch.cat([torch.arange(1, 501).to(torch.float)[None, :], torch.arange(500, 0, -1).to(torch.float)[None, :]], dim=1)
# dataTarget = torch.sin(torch.linspace(0, 4*math.pi, 1000))[None, :]
myNet = nn.Linear(1000, 1000)
optimizer = torch.optim.Adam(myNet.parameters(), lr=0.01)
loss = nn.PairwiseDistance(p=2)
plt.ion() #打开交互模式
plt.plot(dataIn[0], label='dataIn')
plt.plot(dataTarget[0], label='dataTarget')
plt.legend(loc=1)
for i in tqdm(range(1000)):
myNet.train()
optimizer.zero_grad()
l = loss(myNet(dataIn), dataTarget).mean()
l.backward()
optimizer.step()
plt.cla() #将之前的图清空
plt.plot(myNet(dataIn).detach()[0], label='dataIn')
plt.plot(dataTarget[0], label='dataTarget')
plt.legend(loc=1)
plt.title(f'epoch{i}')
plt.pause(0.01) #必须有,否则不显示图案
plt.ioff() #关闭交互模式
plt.show() #在最后画面阻塞
19,增添文字注释、箭头(plt.text(x,y,text,fontsize) plt.arrow(x,y,dx,dy,width,fc) plt.annotate())
title、annotate、text常用参数,以及文本框、数学公式的插入方法
https://blog.csdn.net/weixin_43327597/article/details/110309594
https://blog.csdn.net/DeniuHe/article/details/86670575
20,局部放大图
https://blog.csdn.net/wulishinian/article/details/106668011
21,调整图案尺寸(长宽比):plt.rcParams['figure.figsize'] = (12.0, 2.0)
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,50,100)
y = np.exp(x)
plt.rcParams['lines.linewidth'] = 2
plt.rcParams['lines.linestyle'] = '--'
plt.rcParams['figure.figsize'] = (12.0, 2.0)
plt.plot(x,y,color='r',label='exp1')
plt.legend()
plt.show()
22,调整横纵坐标值:plt.xticks(range(3), ['50', '100', '150'])
23,python自动化提取图片配色
from haishoku.haishoku import Haishoku
image = 'test.png'
haishoku = Haishoku.loadHaishoku(image)
#获取图片的主色调
print(haishoku.dominant)
#打开一个临时文件,用来预览主色调的颜色
Haishoku.showDominant(image)
#获取配色方案,返回一个结构为:[(R, G, B), (R, G, B), …] 最大长度为8的数组。
pprint.pprint(haishoku.palette)
#打开一个临时文件,用来预览图片配色方案。(不会保存在本地)
Haishoku.showPalette(image)
# 另外,Haishoku库从v1.1.4版本后,支持从 url 中直接加载图像。
imagepath = 'https://img-blog.csdnimg.cn/20190222215216318.png'
haishoku = Haishoku.loadHaishoku(imagepath)
https://mp.weixin.qq.com/s/woxJ7yx5Fb9a36_10SUxjw
24,绘制雷达图
https://blog.csdn.net/zx1245773445/article/details/96992357
25,格式美化
plt.style.use('bmh')
# plt.style.available 查看有哪些格式可用,感觉'bmh'还挺好看的
一些技巧帖子
技巧总结1
技巧总结2
https://mp.weixin.qq.com/s/OWa3OBRoAeEOOMCXOtl9jQ
技巧总结3-c语言中文网
等高线绘制决策边界1
等高线绘制决策边界2