为极坐标散点图数据点添加颜色
Adding color to Polar Scatter plot data points
我正在尝试用 Python 制作极地图,到目前为止我已经取得了一些成功
极坐标散点图示例
我确实有几个问题,我希望得到一些 ideas/suggestions:
- 是否可以将圆圈的颜色设置为特定值(例如:下面示例代码中的 "n")?如果是这样,我可以设置特定的颜色范围吗?例如:0-30:红色,31-40:黄色; 41-60: 绿色
注意:根据 Plot with conditional colors based on values in R 中的示例,我尝试了 ax.scatter(ra,dec,c = ifelse(n < 30,’red','green'), pch = 19 )
但没有成功 =(
怎样才能让数据圈大一点?
我可以移动“90”标签以使图表标题不重叠吗?我试过了:
x.set_rlabel_position(-22.5)
但我得到一个错误 ("AttributeError: 'PolarAxes' object has no attribute 'set_rlabel_position'")
是否可以只显示0、30、60高程标签?这些可以水平定向吗(例如:沿着 0 方位角线)?
非常感谢!期待听到您的建议 =)
import numpy
import matplotlib.pyplot as pyplot
dec = [10,20,30,40,50,60,70,80,90,80,70,60,50,40,30,20,10]
ra = [225,225,225,225,225,225,225,225,225,45,45,45,45,45,45,45,45]
n = [20,23,36,43,47,48,49,50,51,50,48,46,44,36,30,24,21]
ra = [x/180.0*3.141593 for x in ra]
fig = pyplot.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8],polar=True)
ax.set_ylim(0,90)
ax.set_yticks(numpy.arange(0,90,10))
ax.scatter(ra,dec,c ='r')
ax.set_title("Graph Title here", va='bottom')
pyplot.show()
对于颜色,您可以使用 c=[每个元素的颜色列表],对于尺寸 s=
喜欢这里:
ax.scatter(ra,dec,c =['r' if a < 31 else 'yellow' if a < 41 else 'green' for a in n], s =40)
对于标题和轴,我建议更改标题的位置:
ax.set_title("Graph Title here", va='bottom', y=1.08)
您可能需要调整图的大小才能正确显示标题:
fig = pyplot.figure(figsize=(7,8))
要查看刻度,您可以使用:
for label in ax.yaxis.get_ticklabels():
label.set_visible(False)
for label in ax.yaxis.get_ticklabels()[::3]:
label.set_visible(True)
总体:
import numpy
import matplotlib.pyplot as pyplot
dec = [10,20,30,40,50,60,70,80,90,80,70,60,50,40,30,20,10]
ra = [225,225,225,225,225,225,225,225,225,45,45,45,45,45,45,45,45]
n = [20,23,36,43,47,48,49,50,51,50,48,46,44,36,30,24,21]
ra = [x/180.0*3.141593 for x in ra]
fig = pyplot.figure(figsize=(7,8))
ax = fig.add_axes([0.1,0.1,0.8,0.8],polar=True)
ax.set_ylim(0,90)
ax.set_yticks(numpy.arange(0,90,10))
ax.scatter(ra,dec,c =['r' if a < 31 else 'yellow' if a < 41 else 'green' for a in n], s =40)
ax.set_title("Graph Title here", va='bottom', y=1.08)
for label in ax.yaxis.get_ticklabels():
label.set_visible(False)
for label in ax.yaxis.get_ticklabels()[::3]:
label.set_visible(True)
pyplot.show()
1.着色点
使用 scatter
的 c
参数允许对点进行着色。在这种情况下,您可以向其提供 n
数组,并根据颜色图选择颜色。颜色图将包含不同的颜色(31 次红色,10 次黄色,20 次绿色)。
使用颜色图的优点是可以轻松使用颜色条。
2。使用 s
参数可以使圆圈变大 。
3。在标签和标题之间添加 space 这最好通过将标题向上移动一点来完成,使用 set_title
的 y
参数。为了让标题不超出图外,我们可以使用subplots_adjust
的方式,让top
小一点。 (请注意,这仅适用于通过子图创建轴的情况。)
4.只显示某些刻度 可以通过设置来完成
ax.set_yticks([0,30,60])
的刻度和沿水平线的方向 ylabels 由 ax.set_rlabel_position(0)
完成。 (注意set_rlabel_position
从1.4版本开始可用,如果你有更早的版本,请考虑更新)。
import numpy as np
import matplotlib.pyplot as plt # don't use pylab
import matplotlib.colors
import matplotlib.cm
dec = [10,20,30,40,50,60,70,80,90,80,70,60,50,40,30,20,10]
ra = [225,225,225,225,225,225,225,225,225,45,45,45,45,45,45,45,45]
n = [20,23,36,43,47,48,49,50,51,50,48,46,44,36,30,24,21]
ra = [x/180.0*np.pi for x in ra]
fig = plt.figure()
ax = fig.add_subplot(111,polar=True)
ax.set_ylim(0,90)
# 4. only show 0,30, 60 ticks
ax.set_yticks([0,30,60])
# 4. orient ylabels along horizontal line
ax.set_rlabel_position(0)
# 1. prepare cmap and norm
colors= ["red"] * 31 + ["gold"] * 10 + ["limegreen"] * 20
cmap=matplotlib.colors.ListedColormap(colors)
norm = matplotlib.colors.Normalize(vmin=0, vmax=60)
# 2. make circles bigger, using `s` argument
# 1. set different colors according to `n`
sc = ax.scatter(ra,dec,c =n, s=49, cmap=cmap, norm=norm, zorder=2)
# 1. make colorbar
cax = fig.add_axes([0.8,0.1,0.01,0.2])
fig.colorbar(sc, cax=cax, label="n", ticks=[0,30,40,60])
# 3. move title upwards, then adjust top spacing
ax.set_title("Graph Title here", va='bottom', y=1.1)
plt.subplots_adjust(top=0.8)
plt.show()
我正在尝试用 Python 制作极地图,到目前为止我已经取得了一些成功
极坐标散点图示例
我确实有几个问题,我希望得到一些 ideas/suggestions:
- 是否可以将圆圈的颜色设置为特定值(例如:下面示例代码中的 "n")?如果是这样,我可以设置特定的颜色范围吗?例如:0-30:红色,31-40:黄色; 41-60: 绿色
注意:根据 Plot with conditional colors based on values in R 中的示例,我尝试了 ax.scatter(ra,dec,c = ifelse(n < 30,’red','green'), pch = 19 )
但没有成功 =(
怎样才能让数据圈大一点?
我可以移动“90”标签以使图表标题不重叠吗?我试过了:
x.set_rlabel_position(-22.5)
但我得到一个错误 ("AttributeError: 'PolarAxes' object has no attribute 'set_rlabel_position'")是否可以只显示0、30、60高程标签?这些可以水平定向吗(例如:沿着 0 方位角线)?
非常感谢!期待听到您的建议 =)
import numpy
import matplotlib.pyplot as pyplot
dec = [10,20,30,40,50,60,70,80,90,80,70,60,50,40,30,20,10]
ra = [225,225,225,225,225,225,225,225,225,45,45,45,45,45,45,45,45]
n = [20,23,36,43,47,48,49,50,51,50,48,46,44,36,30,24,21]
ra = [x/180.0*3.141593 for x in ra]
fig = pyplot.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8],polar=True)
ax.set_ylim(0,90)
ax.set_yticks(numpy.arange(0,90,10))
ax.scatter(ra,dec,c ='r')
ax.set_title("Graph Title here", va='bottom')
pyplot.show()
对于颜色,您可以使用 c=[每个元素的颜色列表],对于尺寸 s= 喜欢这里:
ax.scatter(ra,dec,c =['r' if a < 31 else 'yellow' if a < 41 else 'green' for a in n], s =40)
对于标题和轴,我建议更改标题的位置:
ax.set_title("Graph Title here", va='bottom', y=1.08)
您可能需要调整图的大小才能正确显示标题:
fig = pyplot.figure(figsize=(7,8))
要查看刻度,您可以使用:
for label in ax.yaxis.get_ticklabels():
label.set_visible(False)
for label in ax.yaxis.get_ticklabels()[::3]:
label.set_visible(True)
总体:
import numpy
import matplotlib.pyplot as pyplot
dec = [10,20,30,40,50,60,70,80,90,80,70,60,50,40,30,20,10]
ra = [225,225,225,225,225,225,225,225,225,45,45,45,45,45,45,45,45]
n = [20,23,36,43,47,48,49,50,51,50,48,46,44,36,30,24,21]
ra = [x/180.0*3.141593 for x in ra]
fig = pyplot.figure(figsize=(7,8))
ax = fig.add_axes([0.1,0.1,0.8,0.8],polar=True)
ax.set_ylim(0,90)
ax.set_yticks(numpy.arange(0,90,10))
ax.scatter(ra,dec,c =['r' if a < 31 else 'yellow' if a < 41 else 'green' for a in n], s =40)
ax.set_title("Graph Title here", va='bottom', y=1.08)
for label in ax.yaxis.get_ticklabels():
label.set_visible(False)
for label in ax.yaxis.get_ticklabels()[::3]:
label.set_visible(True)
pyplot.show()
1.着色点
使用 scatter
的 c
参数允许对点进行着色。在这种情况下,您可以向其提供 n
数组,并根据颜色图选择颜色。颜色图将包含不同的颜色(31 次红色,10 次黄色,20 次绿色)。
使用颜色图的优点是可以轻松使用颜色条。
2。使用 s
参数可以使圆圈变大 。
3。在标签和标题之间添加 space 这最好通过将标题向上移动一点来完成,使用 set_title
的 y
参数。为了让标题不超出图外,我们可以使用subplots_adjust
的方式,让top
小一点。 (请注意,这仅适用于通过子图创建轴的情况。)
4.只显示某些刻度 可以通过设置来完成
ax.set_yticks([0,30,60])
的刻度和沿水平线的方向 ylabels 由 ax.set_rlabel_position(0)
完成。 (注意set_rlabel_position
从1.4版本开始可用,如果你有更早的版本,请考虑更新)。
import numpy as np
import matplotlib.pyplot as plt # don't use pylab
import matplotlib.colors
import matplotlib.cm
dec = [10,20,30,40,50,60,70,80,90,80,70,60,50,40,30,20,10]
ra = [225,225,225,225,225,225,225,225,225,45,45,45,45,45,45,45,45]
n = [20,23,36,43,47,48,49,50,51,50,48,46,44,36,30,24,21]
ra = [x/180.0*np.pi for x in ra]
fig = plt.figure()
ax = fig.add_subplot(111,polar=True)
ax.set_ylim(0,90)
# 4. only show 0,30, 60 ticks
ax.set_yticks([0,30,60])
# 4. orient ylabels along horizontal line
ax.set_rlabel_position(0)
# 1. prepare cmap and norm
colors= ["red"] * 31 + ["gold"] * 10 + ["limegreen"] * 20
cmap=matplotlib.colors.ListedColormap(colors)
norm = matplotlib.colors.Normalize(vmin=0, vmax=60)
# 2. make circles bigger, using `s` argument
# 1. set different colors according to `n`
sc = ax.scatter(ra,dec,c =n, s=49, cmap=cmap, norm=norm, zorder=2)
# 1. make colorbar
cax = fig.add_axes([0.8,0.1,0.01,0.2])
fig.colorbar(sc, cax=cax, label="n", ticks=[0,30,40,60])
# 3. move title upwards, then adjust top spacing
ax.set_title("Graph Title here", va='bottom', y=1.1)
plt.subplots_adjust(top=0.8)
plt.show()