python - 如何在 matplotlib 中平滑 2D 颜色图

标签 python dictionary matplotlib 2d pixel

我的问题是是否有任何方法可以使用 matplotlib 平滑 2D 彩色 map ?我的代码:

def map():
    # setup parameters
    j = 0
    N = 719
    N2 = 35
    x = np.linspace(190, 800, N) 
    y = np.linspace(10, 360, N2) # (1,2,3), 1 - start Temp, 2- end temp + 10K, 3 - how many steps to reach it
    z = []
    A = np.zeros([35,719]) # [1 2], 1 - number of spectras, 2 - delta wavelength
    # run
    for i in range(10,360,10):
            Z = []
            file_no = (str(0) + str(i))[-3:]
            data = np.genfromtxt('C:\\Users\\micha_000\\Desktop\\Measure\\' + '160317_LaPONd_g500_%s_radio.txt'%file_no,skip_header = 12)
            for line in data:
                Z.append(line[1]-6000)
            A[j,:] = Z
            j = j+1
    X, Y = np.meshgrid(x,y)
    fig, ax = plt.subplots()
    cs = ax.contourf(X, Y, A, cmap=cm.viridis)
    norm = colors.Normalize(vmin = 0, vmax = 1)
    plt.xlabel('wavelength [nm]')
    plt.ylabel('temperature [K]')
    plt.title('LaPONd_g500')
    cbar = fig.colorbar(cs, norm = norm)
    plt.savefig('C:\\Users\\micha_000\\Desktop\\Measure\\LaPONd_g500_radio_map.png')
    plt.show()
    plt.close()

这是我收到的一个例子: enter image description here

有没有办法通过平滑像素过渡来让它看起来更好?

最佳答案

问题不在于调色板(它们在 matplotlib 中都是平滑的),而是您正在使用 contourf() 的事实,它会生成一组有限的计数,每个计数都有一种颜色,因此并不顺利。默认值类似于 10 个计数。

一个快速解决方案:通过指定级别来增加等高线级别的数量(您也可以给出要包含哪些级别的数组):

cs = ax.contourf(X, Y, A, cmap=cm.viridis, levels=100)

更好的是,因为您的数据数据似乎已经在网格上(例如每个像素的 X、Y、Z 值),您应该使用 pcolormesh(X,Y,A) 而不是轮廓来绘制它。这将绘制完全连续的值,而不是步骤。

关于python - 如何在 matplotlib 中平滑 2D 颜色图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42864823/

相关文章:

python - 在 Seaborn PairGrid 上 reshape 子图

python - 遍历字典以按值的顺序显示键和值

python - 将数据写入 csv 不起作用

python - 创建简单的一次性 Python 对象的简单方法是什么?

python - 如何在模拟对象中 stub 方法?

python - 字符串到具有多个键值的字典

java - 使用 AppEngine 访问本地 map 数据

python - 动画 Matplotlib 面板 - blit 留下旧帧

matplotlib - 在 ipython notebook 中使用 pylab 时内核忙

python - Polars map 上有多个事件的用户