python绘图——坐标轴

Posted 大风起兮d

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python绘图——坐标轴相关的知识,希望对你有一定的参考价值。

1. 2D坐标轴

1.1 绘制简单的曲线

import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-1,1,50)#-1到1中画50个点
y=x**2
plt.plot(x,y,color='green')
plt.tick_params(axis='x',colors='blue')
plt.tick_params(axis='y',colors='red')
plt.show()

作图:

1.2 坐标轴的刻度线向内

import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-1,1,50)#-1到1中画50个点
y=x**2
# 下面两行代码要放在plt.plot的前面
plt.rcParams['xtick.direction'] = 'in'#将x轴的刻度线方向设置向内
plt.rcParams['ytick.direction'] = 'in'#将y轴的刻度线方向设置向内

plt.plot(x,y,color='green')
plt.tick_params(axis='x',colors='blue')
plt.tick_params(axis='y',colors='red')
plt.show()

1.3 将坐标刻度从整0开始

plt.margins(x=0)
plt.margins(y=0)

#设置坐标轴范围
#plt.ylim([0,0.8])
#plt.xlim([0,0.75])

1.4 设置刻度栅格

简单的刻度:

plt.grid()

主刻度和次刻度

import matplotlib.pyplot as plt
import numpy as np
plt.figure(figsize=(17,3))
ax = plt.gca()
ax.xaxis.set_major_locator(plt.MultipleLocator(0.2))    #设置x轴主刻度
ax.xaxis.set_minor_locator(plt.MultipleLocator(0.04))   #设置x轴次刻度
ax.yaxis.set_major_locator(plt.MultipleLocator(0.5))    #设置x轴次刻度
ax.yaxis.set_minor_locator(plt.MultipleLocator(0.1))    #设置x轴次刻度
ax.grid(which='major',axis="both",linewidth=0.75,linestyle='-',color='r')
ax.grid(which='minor',axis="both",linewidth=0.25,linestyle='-',color='r')
x=np.linspace(0,3*np.pi,50)#-1到1中画50个点
y=2*np.sin(x)
plt.plot(x,y)
plt.margins(x=0)
plt.margins(y=0)
plt.show()

下面的图形类似于心电图纸绘制,关于心电图相关的绘制,具体在使用python绘制心电图中体现:

1.5 不显示坐标

只是坐标刻度不可见,两种方式的效果一样

# plt.xticks([])
plt.yticks([])

# 或者下面的
# frame.axes.get_xaxis().set_visible(False) # x 轴不可见
frame.axes.get_yaxis().set_visible(False) # y 轴不可见


关闭两者坐标轴,只有曲线图形

plt.axis('off')

1.6 坐标值

为坐标设置刻度值, 并且将刻度值旋转45度

import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,2,50)#-1到1中画50个点
y=x**2
plt.rcParams['xtick.direction'] = 'in'#将x轴的刻度线方向设置向内
plt.rcParams['ytick.direction'] = 'in'#将y轴的刻度线方向设置向内
ax = plt.gca()
xlabel=[str(val)+'_1' for val in range(100,110)]
ax.set_xticklabels(xlabel)
plt.xticks(rotation = 45)
plt.plot(x,y,color='green')
plt.tick_params(axis='x',colors='blue')
plt.tick_params(axis='y',colors='red')
plt.margins(x=0)
plt.margins(y=0)
plt.show()

1.7 绘制横线和竖线

plt.axvline(1)
plt.axhline(1.5)

1.8 设置坐标点的颜色

下图中设置y轴第3个坐标值的颜色为黄色,x轴第6个坐标值颜色为绿色。

import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,2,50)#-1到1中画50个点
y=x**2
plt.rcParams['xtick.direction'] = 'in'#将x轴的刻度线方向设置向内
plt.rcParams['ytick.direction'] = 'in'#将y轴的刻度线方向设置向内
ax = plt.gca()
plt.plot(x,y,color='green')
plt.tick_params(axis='x',colors='blue')
plt.tick_params(axis='y',colors='red')
ax.get_yticklabels()[3].set_color("y")
ax.get_xticklabels()[6].set_color("g")
plt.show()

1.9 双坐标

代码如下:

import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0.01, 10.0, 0.01)
data1 = np.exp(t)
data2 = np.sin(2 * np.pi * t)

fig, ax1 = plt.subplots()

color = 'tab:red'
ax1.set_xlabel('time (s)')
ax1.set_ylabel('exp', color=color)
ax1.plot(t, data1, color=color)
ax1.tick_params(axis='y', labelcolor=color)

ax2 = ax1.twinx()  # instantiate a second axes that shares the same x-axis

color = 'tab:blue'
ax2.set_ylabel('sin', color=color)  # we already handled the x-label with ax1
ax2.plot(t, data2, color=color)
ax2.tick_params(axis='y', labelcolor=color)

fig.tight_layout()  # otherwise the right y-label is slightly clipped
plt.show()

1.10 坐标设置汉字

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

2. 3D坐标轴

2.1 绘制3D散点图

关键代码ax.scatter(xs, ys, zs, c=c, marker=m),输入数据xs,ys,zs是相同长度的一维数据。c是颜色,marker是散点类型。

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
def randrange(n, vmin, vmax):
    return (vmax - vmin)*np.random.rand(n) + vmin
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
 
n = 100
for c, m, zlow, zhigh in [('r', '*', -10, 20), ('b', 'o', -30, -10)]:
    xs = randrange(n, 23, 32)
    ys = randrange(n, 0, 100)
    zs = randrange(n, zlow, zhigh)
    ax.scatter(xs, ys, zs, c=c, marker=m)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()

2.2 绘制3D曲面图

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig=plt.figure(num=1,figsize=(8,6))
ax = Axes3D(fig)
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X ** 2 + Y ** 2)
# height value
Z = np.cos(R)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow'),edgecolors='white')
ax.contourf(X, Y, Z, zdir='z', offset=-2, cmap=plt.get_cmap('rainbow'))#投影等高线,改变zdir='x', offset=-4实现投影到不同坐标轴     
ax.set_zlim(-2, 2)
ax.tick_params(axis='x',colors='g')
ax.tick_params(axis='y',colors='g')
ax.tick_params(axis='z',colors='g')
plt.show()

2.3 绘制3D柱形图

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm

X=np.arange(0, 9, step=1)#X轴的坐标
Y=np.arange(0, 10, step=1)#Y轴的坐标
arr = [[np.random.randint(1,50) for i in range(9)] for i in range(10)]
Z = np.array(arr)

xx, yy=np.meshgrid(X, Y)#网格化坐标
X, Y=xx.ravel(), yy.ravel()#矩阵扁平化
bottom=np.zeros_like(X)#设置柱状图的底端位值
Z=Z.ravel()#扁平化矩阵

width=height=0.8#每一个柱子的长和宽
#绘图设置
fig=plt.figure()
ax=fig.gca(projection='3d')#三维坐标轴
ax.bar3d(X, Y, bottom, width, height, Z, shade=True,color='lightgreen')#
#坐标轴设置
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

引用

[1]Matplotlib 文档
[2]python绘制三维图
[3]python-绘制3D柱形图
[4]Python + matplotlib更改纵横坐标刻度颜色
[5]Python绘图总结(Matplotlib篇)之坐标轴及刻度

python3绘图示例6-2(基于matplotlib,绘图流程介绍及设置等)

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import os

import numpy as np
import matplotlib as mplt
from matplotlib import pyplot as plt
from matplotlib.ticker import *


# 整个图像为1个figure对象,figure对象包含多个Axes对象,每个Axes对象都拥有自己坐标轴的绘图区域
# 调用figure时,则调用plot,然后plot调用gca,获取axes绘图区域
# 然后gca调用gcf,获取当前figure,如为空则自动生成 figure,相当于调用 subplots
# title-图像标题 Axis-坐标轴 Axis Label-坐标轴标注 Tick-刻度线 Tick Label-刻度注释
# 关系如下
# fig---ax
# ---title
# ---data
# ---xaxis
# ---tick
# ---tick label
# ---label
# ---yaxis
# ---tick
# ---tick label
# ---label

# matplotlib.get_config() 获取当前配置
# 用户matplotlib配置文件路径
path=mplt.get_configdir()
print(path)

# 当前matplotlib配置文件路径
path2=mplt.matplotlib_fname()
print(path2)

# 系统配置文件存放路径
path3=os.getcwd()
print(path3)

# 读取配置文件内容
p=mplt.rcParams
print(p)

# 中文乱码处理 正常显示中文标签 及正负号
plt.rcParams[‘font.sans-serif‘]=[‘Microsoft YaHei‘]
plt.rcParams[‘axes.unicode_minus‘]=False

# 全局关闭
# plt.rcParams.update({‘axes.formatter.useoffset‘:False})
# 画图流程:创建Figure对象->1个或多个Axes或Subplot对象->调用Axies创建各类Artists来画图

# 这里使用的是matplotlib.pyplot 去画图
# 图像 指整个窗口内容 子图值图像中的各个图
# 图1
# 步骤1-创建一个 2*2 的点图像 分辨率为 80

# 参数说明
# 图像数量 num=None, # autoincrement if None, else integer from 1-N
# 图像的长和宽 figsize=None, # defaults to rc figure.figsize
# 分辨率 dpi=None, # defaults to rc figure.dpi
# 区域背景色 facecolor=None, # defaults to rc figure.facecolor
# 区域边缘色 edgecolor=None, # defaults to rc figure.edgecolor
# 是否绘制图像边缘 # frameon=True,
# FigureClass=Figure,
# clear=False,
# **kwargs
# f,axs=plt.subplots(2,2,figsize=(15,15))
fig=plt.figure(20*20,dpi=80)

# 步骤2-设置子图位置 几行几列的网格 第1个参数:1行 第2个参数:1列 第3个参数:图形在网格的位置

# 多个子图组成大图
# fig=plt.figure()->plt.subplot()->plot.plot()->plot.show()

# 子图悬浮在大图上
# fig=plt.figure()->ax=fig.add_axes(位置列表)或ax=fig.axes()->ax.plot()->plt.show()
# fig=plt.figure()->fig.add_subplot()->p=plt.Rectangle()多个->fig.add_subplot().add_patch(p)->fig.canvas.draw()->plot.show()

# plt.subplot(1,1,1)
plt.subplot(111)


# 步骤3-设置线图属性-自定义x y轴
# 坐标轴对象 axes 可放置在图像的任意位置
# 记号位置设置 Tick Locators 记号格式化操作 Tick Formatters

# 方式1 生成数据的方法 定义新刻度的范围和个数
x=np.linspace(-np.pi,np.pi,256,endpoint=True)
c,s=np.cos(x),np.sin(x)

# 绘制曲线 颜色 线宽 线的风格 大图对应的小图标签
# 线的风格 实线 - 破折线 -- 点线 -. 虚线 : 不显示 None ‘‘ ‘ ‘

# 线条标记
# 圆圈 o 小菱形 d 菱形 D
# 正方形 s 五边形 p 六边形1 h 六边形2 H 八边形 8
# 水平线 _ 竖线 | 加号 + 点 . 像素 , 星号 * x X 无 None ‘‘ ‘ ‘
# 1角朝上三角形 ^ 1角朝下三角形 v 1角朝左三角形 < 1角朝右三角形 >

# 线的颜色 红 r 黄 y 白 w 绿 g 蓝 b 青 c 洋红 m 黑 k 支持16进制‘#eeefff‘或3元色组(0.3,0.3,0.3)
# 颜色 线宽 线的风格(颜色+线型) 大图对应的小图标签 可用$$包裹,如$sin(x)$
plt.plot(x,c,color=‘blue‘,linewidth=2.5,linestyle=‘-‘,label=‘cosine‘)
plt.plot(x,s,color=‘red‘,linewidth=2.5,linestyle=‘-‘,label=‘sine‘)

# 属性设置使用set_属性 pyplot.setp()函数 属性获取使用 get_属性 pyplot.getp()

# 方式2
# lines,=plt.plot(1,6,‘-‘)
# lines.set_antialiased(False)

# 坐标取值范围
# plt.axis([xmin,xmax,ymin,ymax])

# 步骤4-1-设置x轴 y轴范围
# 获得当前x轴 y轴范围值
xmin,xmax=plt.xlim()
ymin,ymax=plt.ylim()

# 横轴的上下限
plt.xlim(xmin*1.5,xmax*1.5)

# 纵轴的上下限
plt.ylim(ymin*1.5,ymax*1.5)

# 步骤4-2-设置刻度 刻度位置 间隔 格式
ax=plt.gca()

# 关闭简略的间隔标注
ax.get_xaxis().get_major_formatter().set_useOffset(False)

# 设置横轴标记号
# py.xticks(np.linspace(-4,4,9,endpoint=True))
# py.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi])

# 设置横轴标号标签
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r‘$-pi$‘,r‘$-pi/2$‘,r‘$0$‘,r‘$+pi/2$‘,r‘$+pi$‘])

# 设置纵轴标记号
# plt.yticks(np.linspace(-1,1,5,endpoint=True))
# plt.yticks([-1,0,+1])

# 设置纵轴标号标签
plt.yticks([-1,0,+1],[r‘$-1$‘,r‘$0$‘,r‘$+1$‘])

# 返回一个fig图像 和 一个 ax的 array列表
# fig,ax=plt.subplots(2,2)
# ax=plt.gca()

# 步骤4-3-设置主 次刻度 及注释 2.5的倍数 5的倍数 0.5的倍数 1的倍数
xmin=MultipleLocator(2.5)
xmax=MultipleLocator(5)
xformat=FormatStrFormatter(‘%5.1f‘)

ymin=MultipleLocator(0.5)
ymax=MultipleLocator(1)
yformat=FormatStrFormatter(‘%1.1f‘)

# x轴 主刻度 次刻度
ax.xaxis.set_major_locator(xmax)
ax.xaxis.set_major_formatter(xformat)
ax.xaxis.set_minor_locator(xmin)

# y轴 主刻度 次刻度
ax.yaxis.set_major_locator(ymax)
ax.yaxis.set_major_formatter(yformat)
ax.yaxis.set_minor_locator(ymin)

# 网格刻度类型which major minor both
# 绘制哪个网格线xaxis yaxis x y both
ax.xaxis.grid(True, which=‘major‘)
ax.yaxis.grid(True,which=‘minor‘)

# 步骤5-移动坐标 剩下下面和左边的坐标-看实际需要配置
# 设置对应的边框是否显示 及边框颜色 边框位置:left right bottom top none
ax.spines[‘right‘].set_color(‘none‘)
ax.spines[‘top‘].set_color(‘none‘)

# x轴 设置刻度 top bottom both default none 位置 data axes outward
ax.xaxis.set_ticks_position(‘bottom‘)
ax.spines[‘bottom‘].set_position((‘data‘,0))

# y轴
ax.yaxis.set_ticks_position(‘left‘)
ax.spines[‘left‘].set_position((‘data‘,0))

# 图像上的数据显示更清晰
for label in ax.get_xticklabels() + ax.get_yticklabels():
label.set_fontsize(16)
label.set_bbox(dict(facecolor=‘white‘, edgecolor=‘None‘, alpha=0.65))

# 步骤6-增加图例
plt.legend(loc=‘upper left‘)

# 设置图像外侧与图像间隔距离
plt.subplots_adjust(left=0.2, bottom=0.2, right=0.8, top=0.8,hspace=0.2,wspace=0.3)


# 图像标题
plt.title(‘图1‘)

# 显示图像
plt.show()
















































































































































































































以上是关于python绘图——坐标轴的主要内容,如果未能解决你的问题,请参考以下文章

python_海龟绘图_坐标系问题_画笔各种方法-python工作笔记013

python绘图——坐标轴

Python - 坐标绘图

通过鼠标单击获取 matplotlib 绘图图 python 的坐标

python把图例设置在坐标轴正下方

Python绘图Turtle库详解