Nx = 100
x = np.linspace(0,50,Nx)
y = np.sqrt(x)
fig, ax = plt.subplots(1, 1)
plt.plot(np.sqrt(x), y)
ax.set_xticks([np.sqrt(x[i]) for i in range(0, Nx, Nx // 10)])
ax.set_xticklabels([str(round(x[i],0))[:-2] for i in range(0, Nx, Nx // 10)])
plt.xlabel('x')
plt.ylabel(r'y = $\sqrt{x}$')
plt.grid()
plt.show()
"""
Demonstration of using norm to map colormaps onto data in non-linear ways.
"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors
from matplotlib.mlab import bivariate_normal
N = 100
X, Y = np.mgrid[-3:3:complex(0, N), -2:2:complex(0, N)]
'''
PowerNorm: Here a power-law trend in X partially obscures a rectified
sine wave in Y. We can remove gamma to 0.5 should do the trick using PowerNorm.
'''
X, Y = np.mgrid[0:3:complex(0, N), 0:2:complex(0, N)]
Z1 = (1 + np.sin(Y * 10.)) * X**(2.)
fig, ax = plt.subplots(2, 1)
pcm = ax[0].pcolormesh(X, Y, Z1, norm=colors.PowerNorm(gamma=1./2.),
cmap='PuBu_r')
fig.colorbar(pcm, ax=ax[0], extend='max')
pcm = ax[1].pcolormesh(X, Y, Z1, cmap='PuBu_r')
fig.colorbar(pcm, ax=ax[1], extend='max')
fig.show()
6条答案
按热度按时间kzmpq1sx1#
您可以创建自己的
ScaleBase
类来完成此操作。为了您的目的,我修改了here的示例(它生成了一个平方标度,而不是平方根标度)。另请参阅文档here。请注意,要正确地执行此操作,您可能还应该创建自己的自定义滴答定位器;但我在这里没有这样做;我只是使用
ax.set_yticks()
手动设置主刻度和次刻度。fnvucqvd2#
这是旧的,但我做了一个快速修复,因为我不想创建一个自定义的滴答定位器。如果你正在制作很多带有自定义比例的图,这可能是要走的路。如果您只需要一两个图,只需使用所需的比例绘制函数,然后设置刻度并更改标签会更快。
产生了情节
egdjgwm83#
我喜欢lolopop的评论和tom的回答,一个更快更脏的解决方案是使用set_yticks和set_yticklabels,如下所示:
6jjcrrmo4#
使用
matplotlib.scale.FuncScale
。它本质上是一个一行程序,取尺度函数和它的逆。如果你想让它看起来好看,你可以添加自定义刻度等等:vcudknz35#
Matplotlib现在提供了一个powlaw规范。因此,将功率设置为0.5应该就可以了!
C.f. Matplotlib Powerlaw norm
他们的例子:
vwoqyblh6#
这是绘制
的简单方法