admin管理员组文章数量:1399797
I have a dataset with values for X, Y and Z, where each value in an array corresponds to a single value in the others (X[i] corresponds to Y[i] and Z[i]). I want to plot that as a heatmap similar to this:
Where I convert X and Y to polar coordinates and the color represents the value of Z. How can I do this? All the solutions I found are for cases where each X[i] corresponds to multiple values of y, or Z is already a mesh, which is not my case.
The following code is an example of what I've been trying.
import numpy as np
import matplotlib.pyplot as plt
n = 5
z = np.linspace(0, 5, n)
x = np.linspace(-1, 1, n)
y = np.linspace(-1, 1, n)
r = np.sqrt(x**2 + y**2)
th = np.arctan2(y, x)
fig, ax = plt.subplots(subplot_kw={'projection':'polar'})
ax.pcolormesh(x, y, z, shading='nearest', vmin=z.min(), vmax=z.max())
X, Y = np.meshgrid(x, y)
ax.plot(X.flat, Y.flat, 'o', color='m')
plt.show()
I have a dataset with values for X, Y and Z, where each value in an array corresponds to a single value in the others (X[i] corresponds to Y[i] and Z[i]). I want to plot that as a heatmap similar to this:
Where I convert X and Y to polar coordinates and the color represents the value of Z. How can I do this? All the solutions I found are for cases where each X[i] corresponds to multiple values of y, or Z is already a mesh, which is not my case.
The following code is an example of what I've been trying.
import numpy as np
import matplotlib.pyplot as plt
n = 5
z = np.linspace(0, 5, n)
x = np.linspace(-1, 1, n)
y = np.linspace(-1, 1, n)
r = np.sqrt(x**2 + y**2)
th = np.arctan2(y, x)
fig, ax = plt.subplots(subplot_kw={'projection':'polar'})
ax.pcolormesh(x, y, z, shading='nearest', vmin=z.min(), vmax=z.max())
X, Y = np.meshgrid(x, y)
ax.plot(X.flat, Y.flat, 'o', color='m')
plt.show()
Share
Improve this question
edited Mar 25 at 15:45
BigBen
50.2k7 gold badges28 silver badges44 bronze badges
asked Mar 25 at 15:20
NillmerNillmer
1831 silver badge7 bronze badges
1 Answer
Reset to default 1There are a couple of options: 1) you do binning or interpolation of your parameters onto a 2D grid that you can then pass to pcolormesh
, 2) you just use a scatter
plot of your 1D data (there will likely be gaps in your plot).
An example of interpolation is:
import numpy as np
from scipy.interpolate import interp2d
import matplotlib.pyplot as plt
# create some artificial data
n = 250
rng = np.random.default_rng()
z = rng.uniform(0, 5, n)
x = rng.uniform(-np.pi, np.pi, n)
y = rng.uniform(-np.pi, np.pi, n)
# create a 2d interpolation function
f = interp2d(x, y, z, kind="linear")
# interpolation grid
nbins = 100
xi = np.linspace(-np.pi, np.pi, nbins)
yi = np.linspace(-np.pi, np.pi, nbins)
X, Y = np.meshgrid(xi, yi)
# get interpolated Z values on the grid
Z = f(xi, yi)
# make the polar plot
fig, ax = plt.subplots(subplot_kw={'projection':'polar'})
ax.pcolormesh(X, Y, Z, shading='nearest', vmin=z.min(), vmax=z.max())
Or, just using a scatter plot:
import numpy as np
import matplotlib.pyplot as plt
n = 5000
rng = np.random.default_rng()
# data points
z = rng.uniform(0, 5, n)
x = rng.uniform(-np.pi, np.pi, n)
y = rng.uniform(-np.pi, np.pi, n)
fig, ax = plt.subplots(subplot_kw={'projection':'polar'})
ax.scatter(x, y, c=z, s=25)
本文标签: pythonHeatmap of dataset with 3 1dimensional arraysStack Overflow
版权声明:本文标题:python - Heatmap of dataset with 3 1-dimensional arrays? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744186418a2594310.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论