【问题标题】:How to use color bar in polar plot?如何在极坐标图中使用颜色条?
【发布时间】:2019-08-29 10:22:01
【问题描述】:

我正在尝试在极坐标图中使用颜色条。我没有得到。这是我的简单极坐标图代码。

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

y2 = [96.31883883883884, 105.53807807807806, 96.4374174174175, 94.50975975975975, 82.67206206206207, 125.8472472472473, 126.62304304304303, 124.98103103103091, 117.13329329329326, 109.36357357357365, 107.02209209209208, 117.19069069069054, 96.31883883883884]
y3 = [242.29120120120174, 227.6075375375375, 220.69459459459455, 222.21662324649296, 225.59189189189183, 218.9322422422421, 219.08093093093117, 226.80649649649635, 229.3265965965969, 201.60476476476458, 196.92468468468442, 190.94575575575595, 242.29120120120174]
y4 = [31.625100401606428, 36.0695295295295, 35.989519038076125, 38.314428857715434, 40.236536536536505, 67.78894894894894, 68.63077077077074, 64.99336336336333, 63.45824824824829, 63.41446446446452, 61.0178978978978, 63.99864864864866, 31.625100401606428]

z = np.arange(0, 13)
theta1 = (2*np.pi/12)*z
ax1 = fig.add_axes([0.42, 0.36, 0.18, 0.30], polar=True, axisbg='white')
ax1.plot(theta1, y2, color='black', lw=2)       
ax1.plot(theta1, y3, color='blue', lw=2)        
ax1.plot(theta1, y4, color='green', lw=2)

ax1.set_rmax(500)

ax1.set_theta_zero_location('N')
ax1.set_xticklabels(['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'], color='red')
plt.show()

【问题讨论】:

  • 颜色条主要在处理颜色图时很有用。在这里,您没有颜色图。您能否更详细地了解彩条应该显示的内容?
  • 显示的绘图将通过pcolormesh 创建。因此,在考虑颜色条之前,请尝试将极坐标图弄清楚。参见例如stackoverflow.com/questions/36513312/polar-heatmaps-in-python
  • 我认为,根据您的链接,rad = y2,azm = theta1。没看懂z!这是一个列表,但我在一个极坐标图中有 3 个不同的值(y2、y3、y4)。

标签: python matplotlib colorbar


【解决方案1】:

我们的想法是创建一个pcolormesh 数据图。为此,首先需要为 theta 和 r 定义坐标数组。

import numpy as np
import matplotlib.pyplot as plt

y2 = [96.31883883883884, 105.53807807807806, 96.4374174174175, 94.50975975975975, 82.67206206206207, 125.8472472472473, 126.62304304304303, 124.98103103103091, 117.13329329329326, 109.36357357357365, 107.02209209209208, 117.19069069069054, 96.31883883883884]
y3 = [242.29120120120174, 227.6075375375375, 220.69459459459455, 222.21662324649296, 225.59189189189183, 218.9322422422421, 219.08093093093117, 226.80649649649635, 229.3265965965969, 201.60476476476458, 196.92468468468442, 190.94575575575595, 242.29120120120174]
y4 = [31.625100401606428, 36.0695295295295, 35.989519038076125, 38.314428857715434, 40.236536536536505, 67.78894894894894, 68.63077077077074, 64.99336336336333, 63.45824824824829, 63.41446446446452, 61.0178978978978, 63.99864864864866, 31.625100401606428]

theta = np.linspace(0, 2*np.pi, len(y2))
r = [1,2,3,4]

z = [y2,y3,y4]

fig=plt.figure()
ax = fig.add_subplot(111, polar=True)

pc = ax.pcolormesh(theta, r, z)

fig.colorbar(pc)

ax.set_theta_zero_location('N')
ax.set_xticklabels(['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'], color='red')
plt.show()

【讨论】:

  • 嗨!如何将一个箱子分成两个箱子让我们说 0-30 到 0-15 和 15-30?
  • 您需要为列表中的每个值多一个值(最后一个除外),以及两倍的 theta 值。
  • 是的,我在 y2 列表中还有一个值,比如说 70.23657983464534 在 345° 处。但其余值是相同的。我只想将 330 到 360 的单箱拆分为 330 到 345 和 345 到 360。
  • 我还有一个问题!我的数据正好是 0°、30°、60° 等等。根据您的绘图箱从 0° 开始到 30°,依此类推。如何从 345° 到 15、15 到 45 等开始 bin。我想将每个 bin 的中心朝向 0°、30° 等。
猜你喜欢
  • 2020-10-25
  • 2018-06-04
  • 1970-01-01
  • 2012-08-15
  • 2016-08-05
  • 2016-01-09
  • 1970-01-01
  • 2022-07-25
  • 1970-01-01
相关资源
最近更新 更多