如何制作不同大小、颜色、位置的散点图?
How to make a scatter plot of different sizes, colour, and positions?
如何用delta_x和delta_y位置的随机值制作散点图;其中每个点都有一定的频率值(颜色强度根据强度变化),即一定的符号。
示例图:(来自Alberdi, et al, 2013)
如果我没理解错的话,你是在问如何让 scatter
共享色标但对不同的组使用不同的符号,对吗?
有几种不同的方法来处理这个问题。
关键是多次调用 scatter
(每个不同的组一个),但传入相同的 vmin
、vmax
和 cmap
参数。
作为重现上述情节的完整(并且可以说过于复杂)示例:
import numpy as np
import matplotlib.pyplot as plt
# Generate data
freq_groups = [1.7, 2.3, 5.0, 8.4]
num = 50
x = np.random.normal(0, 0.5, num)
y = np.random.normal(0.2, 0.5, num)
year = 9 * np.random.random(num) + 1993.5
frequencies = np.random.choice(freq_groups, num)
symbols = ['o', '^', 's', 'd']
# Plot data
fig, ax = plt.subplots(figsize=(8, 9))
for freq, marker in zip(freq_groups, symbols):
mask = np.isclose(freq, frequencies)
scat = ax.scatter(x[mask], y[mask], c=year[mask], s=100, marker=marker,
cmap='jet_r', vmin=year.min(), vmax=year.max(),
label='{:0.1f} GHz'.format(freq), color='black')
ax.legend(loc='upper left', scatterpoints=1)
ax.set(xlabel='Relative RA (mas)', ylabel='Relative Dec (mas)')
ax.invert_xaxis()
cbar = fig.colorbar(scat, orientation='horizontal')
cbar.set_label('Epoch (year)')
cbar.formatter.useOffset = False
cbar.update_ticks()
fig.tight_layout()
plt.show()
如何用delta_x和delta_y位置的随机值制作散点图;其中每个点都有一定的频率值(颜色强度根据强度变化),即一定的符号。
示例图:(来自Alberdi, et al, 2013)
如果我没理解错的话,你是在问如何让 scatter
共享色标但对不同的组使用不同的符号,对吗?
有几种不同的方法来处理这个问题。
关键是多次调用 scatter
(每个不同的组一个),但传入相同的 vmin
、vmax
和 cmap
参数。
作为重现上述情节的完整(并且可以说过于复杂)示例:
import numpy as np
import matplotlib.pyplot as plt
# Generate data
freq_groups = [1.7, 2.3, 5.0, 8.4]
num = 50
x = np.random.normal(0, 0.5, num)
y = np.random.normal(0.2, 0.5, num)
year = 9 * np.random.random(num) + 1993.5
frequencies = np.random.choice(freq_groups, num)
symbols = ['o', '^', 's', 'd']
# Plot data
fig, ax = plt.subplots(figsize=(8, 9))
for freq, marker in zip(freq_groups, symbols):
mask = np.isclose(freq, frequencies)
scat = ax.scatter(x[mask], y[mask], c=year[mask], s=100, marker=marker,
cmap='jet_r', vmin=year.min(), vmax=year.max(),
label='{:0.1f} GHz'.format(freq), color='black')
ax.legend(loc='upper left', scatterpoints=1)
ax.set(xlabel='Relative RA (mas)', ylabel='Relative Dec (mas)')
ax.invert_xaxis()
cbar = fig.colorbar(scat, orientation='horizontal')
cbar.set_label('Epoch (year)')
cbar.formatter.useOffset = False
cbar.update_ticks()
fig.tight_layout()
plt.show()