- 积分
- 492
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2021-12-11
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 XiaoMaFenJu 于 2022-1-28 17:03 编辑
问题描述:
下图是我想要得到的结果,特点是数值非均匀但间距相等,也就是colorbar密度不同。
目前达到的结果为下图
代码如下
- import matplotlib.pyplot as plt
- import numpy as np
- import matplotlib as mpl
- #数据读取
- data1 = np.loadtxt("./data/test.asc", skiprows=6)
- #绘图,透明度50%,下限值0
- img1 = plt.imshow(data1,alpha=0.5,vmin = 0,cmap = mpl.cm.get_cmap("plasma").copy())
- #缺省值设置无色
- img1.cmap.set_under(alpha = 0)
- levels = [0,0.5,1,10,100,500,1000,2000,5000,10000]
- h = plt.colorbar(ticks=levels,spacing = 'uniform')
- plt.show()
复制代码
实在不知道咋办了,请各位大佬指点!
我目前还有两种想法,一种是自定义colormap,一种是改坐标轴ticks,但是看了许久还是没看明白,😔
====================================2022.01.28========================================
更新!!!问题解决!
也非常感谢评论区的各位大佬,这两天也是在自己摸索(摸鱼),找官方文档和茫茫的百度,选定的是 mpl.colors.BoundaryNorm ,但还是有点差距,还是密度问题没有解决,但看到评论区大佬也有用这个方法,和我当时找到的BoundaryNorm大体是运用一样的,那说明这个应该是没有错的,那问题应该在别的地方。
正好前时间在找资料的时候找到一个“炸鸡人博客”,链接就不放了 ps:不让放;) ,有很详细的colormap和colorbar的讲解(我觉得这篇博客很nice,比官方文档看起来还舒服),当时我着重在BoundaryNorm,于是翻看其他部分,找到下面这句话:
- 对于画马赛克图的 pcolor、pcolormesh 和 imshow 函数,我们在实际使用中并不需要手动进行数据的归一化和颜色索引,只需在调用函数时通过 cmap 和 norm 参数把 colormap 和归一化的类传入即可,绘图函数会自动计算数据和颜色的对应关系。cmap 默认为 viridis,norm 默认为无参数的 Normalize。
复制代码 但是我之前是试过的,camp可以传入,但是norm会报错,这时我又去看那篇博客,发现
- # 若在pcolormesh中给定了norm,就不能再指定vmin和vmax了.
复制代码 问题可以说解决了!删掉imshow()中的vmin和vmax,转而传入norm就没问题了!
很感谢评论区的各位大佬!
完整代码我会附在下面!
- import matplotlib.pyplot as plt
- import numpy as np
- import matplotlib as mpl
- #数据读取
- data = np.loadtxt("./data.asc", skiprows=6)
- #colorbar设置
- cmap = mpl.cm.jet
- bins = [0, 0.5, 1, 10, 50, 100, 500, 1000, 2000, 5000]
- nbin = len(bins) - 1
- npt = cmap.N // nbin
- segments = []
- for i in range(nbin):
- segment = np.linspace(bins[i], bins[i + 1], npt)
- if i < nbin - 1:
- segment = segment[:-1]
- segments.append(segment)
- segments = np.concatenate(segments)
- norm = mpl.colors.BoundaryNorm(segments, cmap.N)
- #绘图,透明度50%,下限值0
- img1 = plt.imshow(data,alpha=0.5,norm = norm,cmap = cmap.copy())
- #缺省值设置无色
- img1.cmap.set_under(alpha = 0)
- #colorbar
- h = plt.colorbar()
- h.set_ticks(bins)
- h.set_ticklabels(bins)
- #本地保存
- #plt.savefig('test5',dpi = 1600)
- #图片输出
- plt.show()
复制代码 输出结果如下:
|
|