使用python matplotlib画二维图,设置坐标轴刻度和colorbar刻度ticks

导入包

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
from matplotlib.ticker import (MultipleLocator, FormatStrFormatter, AutoMinorLocator)

数据准备

xi = np.linspace(-50000, 50000, 500)#从-50000到50000等间隔采样500个点构建1D数组
yi = np.linspace(-50000, 50000, 500)#从-50000到50000等间隔采样500个点构建1D数组

#从1D坐标得到2D网格坐标
X,Y=np.meshgrid(xi,yi)

#合成数据
Z=np.sin(1e-8*X*Y)*np.exp(-1e-8*X**2-1e-8*Y**2)

#自定义色标
colors=["magenta","blueviolet","royalblue","aqua","springgreen","greenyellow","yellow","orangered","red","white"]
clrmap=mcolors.LinearSegmentedColormap.from_list("mycmap",colors)

画图

#开始绘制
#图片宽度6, 高4,单位inch
fig=plt.figure(figsize=(6,4))
plt.pcolor(X,Y,Z,cmap=clrmap)

#令xy的尺度相同
plt.gca().set_aspect('equal', 'box')

#设置xy轴标签
plt.gca().set_xlabel("x (cm)",fontsize=12.5)
plt.gca().set_ylabel("y (cm)",fontsize=12.5)

到此,得下图
在这里插入图片描述

令xy坐标刻度用科学计数法表示

使用matplotlib.axes.Axes.ticklabel_format来控制坐标刻度格式。

  • 用法:ticklabel_format(style='scientific',scilimits=(m,n),useMathText=False)
    • scilimits=(m,n)表示如果刻度范围超出 1 0 m 10^m 10m 1 0 n 10^n 10n,那么就是用科学计数法。
    • 如果将scilimits参数设为(0,0),那么对于所有的刻度范围都自动显示成科学计数的形式。
    • 令useMathText=False的时候,会显示为 1 e X 1eX 1eX的形式,useMathText=True的时候,会显示成 1 0 X 10^X 10X的形式。
  • 官方文档:https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.ticklabel_format.html#matplotlib.axes.Axes.ticklabel_format

在前面的画图代码继续敲下面这行:

#xy坐标刻度使用科学计数法
plt.gca().ticklabel_format(style='scientific',scilimits=(-2,2),useMathText=True)

得到下图
在这里插入图片描述

控制刻度间隔

  • 方法set_major_locator(locator)设置主刻度,set_minor_locator(locator)设置副刻度。locater使用MultipleLocator(n)可以令间隔为n,如果用AutoMinorLocator()则自动设置间隔。
  • 官方示例Major and minor ticks

继续上述的实例

#设置主刻度 major ticks和副刻度minor ticks
#使用MultipleLocator(10000)设置主刻度的间隔为10000
plt.gca().xaxis.set_major_locator(MultipleLocator(10000))
plt.gca().yaxis.set_major_locator(MultipleLocator(10000))

#自动设置副刻度的间隔
plt.gca().xaxis.set_minor_locator(AutoMinorLocator())
plt.gca().yaxis.set_minor_locator(AutoMinorLocator())

运行得到
在这里插入图片描述

刻度字体大小

#设置刻度的字体大小,which='both'表示major和minor ticks一起设置
plt.gca().tick_params(which='both',labelsize=12.5)
#下面两句设置x轴和y轴科学计数法部分(即x10^(4))的字体
plt.gca().xaxis.get_offset_text().set_fontsize(12.5)
plt.gca().yaxis.get_offset_text().set_fontsize(12.5)

得下图
在这里插入图片描述

添加colorbar并设置刻度

给图片添加颜色条,并且设置颜色条的刻度

#添加颜色条
clb=plt.colorbar()
#设置颜色条的刻度
clb.ax.yaxis.set_major_locator(MultipleLocator(0.025))
clb.ax.yaxis.set_minor_locator(MultipleLocator(0.005))
clb.ax.tick_params(labelsize=12.5)
#设置颜色条的title
clb.ax.set_title('unit',fontsize=12.5)

在这里插入图片描述

完整代码

完整代码如下:

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
from matplotlib.ticker import (MultipleLocator, FormatStrFormatter, AutoMinorLocator)

#产生数据
#从-50000到50000等间隔采样500个点
xi = np.linspace(-50000, 50000, 500)
yi = np.linspace(-50000, 50000, 500)

#从一维数组得到二维数组
X,Y=np.meshgrid(xi,yi)
Z=np.sin(1e-8*X*Y)*np.exp(-1e-8*X**2-1e-8*Y**2)

#自定义色标
colors=["magenta","blueviolet","royalblue","aqua","springgreen","greenyellow","yellow","orangered","red","white"]
clrmap=mcolors.LinearSegmentedColormap.from_list("mycmap",colors)

#开始绘制
#图片宽度6, 高4,单位inch
fig=plt.figure(figsize=(6,4))
plt.pcolor(X,Y,Z,cmap=clrmap)

#令xy的尺度相同
plt.gca().set_aspect('equal', 'box')

#设置xy轴标签
plt.gca().set_xlabel("x (cm)",fontsize=12.5)
plt.gca().set_ylabel("y (cm)",fontsize=12.5)

#xy坐标刻度使用科学计数法
plt.gca().ticklabel_format(style='scientific',scilimits=(-2,2),useMathText=True)

#设置主刻度 major ticks和副刻度minor ticks
#使用MultipleLocator(10000)设置主刻度的间隔为10000
plt.gca().xaxis.set_major_locator(MultipleLocator(10000))
plt.gca().yaxis.set_major_locator(MultipleLocator(10000))

#自动设置副刻度的间隔
plt.gca().xaxis.set_minor_locator(AutoMinorLocator())
plt.gca().yaxis.set_minor_locator(AutoMinorLocator())

#设置刻度的字体大小,axis='both'表示major和minor ticks一起设置
plt.gca().tick_params(which='both',labelsize=12.5)
#下面两句设置x轴和y轴科学计数法部分(即x10^(4))的字体
plt.gca().xaxis.get_offset_text().set_fontsize(12.5)
plt.gca().yaxis.get_offset_text().set_fontsize(12.5)

#添加颜色条
clb=plt.colorbar()
#设置颜色条的刻度
clb.ax.yaxis.set_major_locator(MultipleLocator(0.025))
clb.ax.yaxis.set_minor_locator(MultipleLocator(0.005))
clb.ax.tick_params(labelsize=12.5)
#设置颜色条的title
clb.ax.set_title('unit',fontsize=12.5)

plt.show()
  • 17
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<h3>回答1:</h3><br/>在 Matplotlib 中,可以使用 `colorbar` 函数来为像添加颜色条。在函数中使用 `ticks` 参数可以自定义颜色条的刻度。例如: ```python import matplotlib.pyplot as plt import numpy as np data = np.random.rand(10, 10) fig, ax = plt.subplots() im = ax.imshow(data) cbar = fig.colorbar(im, ticks=[0, 0.25, 0.5, 0.75, 1.0]) plt.show() ``` 这样就可以在颜色条上显示 [0, 0.25, 0.5, 0.75, 1.0] 这几个刻度值。 <h3>回答2:</h3><br/>Python提供了一种灵活的方式来自定义colorbar刻度,可以通过matplotlib.pyplot.colorbar()函数对colorbar的色彩映射进行设置。下面,我们详细介绍如何使用Python自定义colorbar刻度。 首先,我们需要导入必要的Python库。通常,我们使用Matplotlib绘制colorbar,因此需要确保安装了Matplotlib库。 ``` import matplotlib.pyplot as plt import numpy as np ``` 接着,我们需要定义一个颜色映射,并创建一个像(即heatmap),以及对像进行简单的配置,使其更容易查看。 ``` data = np.random.random((10, 10)) cmap = plt.cm.jet plt.imshow(data, cmap=cmap, interpolation='nearest') plt.colorbar() plt.show() ``` 上述代码将生成10x10的随机数组,并使用jet色彩映射显示为一个heatmap,其中包含一个默认的colorbar。 现在,我们可以进一步自定义colorbar刻度。首先,我们需要定义自己的刻度值。 ``` ticks = [0.0, 0.2, 0.4, 0.6, 0.8, 1.0] ``` 接下来,我们需要创建一个有序的色彩映射对象,并将其传递给colorbar()函数。在此过程中,我们将刻度参数传递给colorbar()函数,使用ticks参数。 ``` bounds = np.linspace(0.0, 1.0, len(ticks)) norm = plt.Normalize(bounds[0], bounds[-1]) colors = cmap(norm(np.arange(bounds.size))) fig, ax = plt.subplots(figsize=(6, 1)) fig.subplots_adjust(bottom=0.5) cb = plt.colorbar( colorbar.ColorbarBase( ax, cmap=cmap, norm=norm, ticks=ticks, boundaries=bounds, orientation='horizontal')) cb.ax.set_xlabel('Colorbar Title', fontsize=14) plt.show() ``` 在此代码中,我们首先使用np.linspace()函数生成一个长度为6的等差数列,该数列覆盖0.0到1.0的范围,并将其存储在变量bounds中。接下来,我们使用plt.Normalize()函数生成归一化的颜色映射,并使用cmap()函数为每个刻度条目生成相应的颜色。然后,我们创建一个新的坐标轴,用于创建colorbar,并将其配置为水平显示。最后,我们在colorbar设置一个标题,以便清楚地说明它所代表的内容。 在完成上述步骤后,我们就可以自定义colorbar刻度了。可以根据自己的需求调整刻度值。以上是一种常用的Python自定义colorbar刻度的方法,供大家参考。 <h3>回答3:</h3><br/>Python中的colorbar是一种方便的工具,可以将颜色映射和形关联起来,并将颜色范围标记在形上。一般情况下,colorbar自带根据数据自动设置刻度的功能,但有时我们需要自定义colorbar刻度,以便更好地与数据相对应。 在Python中,可以使用Matplotlib库中的colorbar函数来自定义colorbar刻度。具体步骤如下: 1. 导入必要的库 ```python import matplotlib.pyplot as plt import numpy as np ``` 2. 创建颜色映射 ```python cmap = plt.get_cmap('cool') # 创建颜色映射 ``` 3. 创建形并绘制数据 ```python fig, ax = plt.subplots() im = ax.imshow(data, cmap=cmap) ``` 4. 设置colorbar ```python cbar = ax.figure.colorbar(im, ax=ax, cmap=cmap, shrink=0.6) ``` 其中,ax.figure.colorbar()函数是用于创建colorbar的。shrink参数用于设置colorbar的大小。 5. 自定义刻度 我们可以使用cbar.set_ticks()函数来设置刻度。例如,我们可以设置从0到1之间的五个均匀间隔值作为刻度。 ```python ticks = np.linspace(0,1,5) cbar.set_ticks(ticks) ``` 6. 设置刻度标签 我们可以使用cbar.set_ticklabels()函数来设置刻度标签。例如,我们可以将刻度标签设置为百分比形式。 ```python ticklabels = ['{}%'.format(int(i*100)) for i in ticks] cbar.set_ticklabels(ticklabels) ``` 最后,我们可以在刻度旁边添加一个颜色条,以便更好地理解颜色与数据的对应关系。这可以通过使用cbar.ax.yaxis.set_tick_params()函数来实现。 ```python cbar.ax.yaxis.set_tick_params(width=0) cbar.ax.yaxis.set_tick_params(pad=30) ``` 以上就是自定义colorbar刻度的步骤和方法。通过这些方法,我们可以更好地将colorbar与数据相关联,并更好地展示和解释数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值