python - 数据点颜色从预先指定的点呈放射状变化

标签 python matplotlib jupyter-notebook astronomy

我想将某些数据点的颜色设置为以某个点为中心,例如图表上的 [1,2],因此数据点距离中心点越远,它们就会开始改变颜色。因此,从该点开始有一定的半径,其中的数据点是一种颜色,依此类推。

我特别想使用以下十六进制颜色代码创建热图:

FF0088、FF0099、FF00AA 和 660088、660099、6600AA

我还想让分界线两侧的明显颜色发生变化。

import numpy as np
import matplotlib.pyplot as plt

data_dC = [
        [1.29940,-0.06908,0.85295,-0.32388,0.51436,0.00408,-0.83824,-0.11374,0.04466],
        [0.93471,0.10030,1.25981,-0.11888,1.35810,-0.12869,-1.47697,0.02932,0.07098],
        [0.57901,0.25031,1.77954,-0.34448,0.94303,-0.20675,-1.28751,0.23731,0.01300],
        [0.51240,0.53625,3.43752,-0.21142,0.83936,0.19316,-1.05078,0.29039,0.24586],
        [0.23750,0.81001,6.45671,-0.21533,0.50952,-0.09047,-0.72484,0.62434,0.18567],
        [0.68737,0.38333,2.41730,-0.32624,0.87260,-0.00159,-1.19884,0.16281,0.22052],
        [0.61870,0.16834,1.47348,-0.18783,0.55844,0.33093,-0.74627,0.20852,-0.04018],
        [2.05987,-0.36247,0.43404,-0.21760,0.95765,0.04392,-1.17525,-0.31384,-0.04863],
        [0.32613,0.18240,1.52197,-0.30043,1.00514,-0.00491,-1.30558,0.48662,-0.30421],
        [0.90927,-0.16005,0.69175,-0.26315,1.19294,-0.02365,-1.45609,0.04131,-0.20136],

def log_OIII_OII_OI(log_OI_Ha, eps=0):
    return ((-1.701)*(log_OI_Ha))-2.163

OI2 = np.linspace(-2.50000, 0.00000)

data_dC = np.array(data_dC)

log_OIHa_dC    = data_dC[:, 6]
log_OIIIOII_dC = data_dC[:, 7]

base_point = (-1.4, -0.8)

def boundary_x(x):
    return ((-1.701)*(x))-2.163

def myDistance(log_OIHa_dC, log_OIIIOII_dC, base):
return np.sqrt((log_OIHa_dC - base[0])**2 + (log_OIIIOII_dC - base[1])**2)

dist = myDistance(log_OIHa_dC, log_OIIIOII_dC, base_point)

fig, ax = plt.subplots()
ax.plot(OI2, log_OIII_OII_OI(OI2), '-k')
ax.set_yticks([-1.5,-1.0,-0.5,0.0,0.5])
ax.set_xlim(-2.5, 0.0)
ax.set_ylim(-1.5, 1.0)

ax.plot(base_point[0], base_point[1], 'ko')
ax.scatter(log_OIHa_dC[log_OIHa_dC >= boundary_x(x)], log_OIIIOII_dC[log_OIHa_dC >=       boundary_x(x)], c=dist[log_OIHa_dC >= boundary_x(x)], cmap=plt.cm.Blues)
ax.scatter(log_OIHa_dC[log_OIHa_dC < boundary_x(x)], log_OIIIOII_dC[log_OIHa_dC < boundary_x(x)], c=dist[log_OIHa_dC < boundary_x(x)], cmap=plt.cm.Reds)

所以基本上在这条分界线的右上角我想要十六进制颜色 660088、660099、6600AA,在它的左下角我想要 FF0088、FF0099、FF00AA。

分界线左下的点是[-1.4,-0.8],分界线右上的点是[-0.9,0.2]。

最佳答案

您需要使用ax.scatter并根据距您的点的距离为其提供颜色。您还可以使用 numpy 的精美索引来根据条件(例如分界线)选择内容。

您没有包含任何您希望看到的示例图像,因此以下是这些概念组合在一起的基本示例:

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
%matplotlib inline

def myBoundary(x, y0=0, slope=1):
    return y0 + x * slope

def myDistance(x, y, base_x, base_y):
    return np.sqrt((x - base_x)**2 + (y - base_y)**2)

x = np.random.normal(size=137)
y = np.random.normal(size=137)

y_boundary = myBoundary(x)

base_x, base_y = (-1.4, -0.8)

dist = myDistance(x, y, base_x, base_y)

fig, ax = plt.subplots()
ax.scatter(x[y >= y_boundary], y[y >= y_boundary], c=dist[y >= y_boundary], cmap=plt.cm.Blues_r)
ax.scatter(x[y < y_boundary], y[y < y_boundary], c=dist[y < y_boundary], cmap=plt.cm.Reds_r)
ax.plot(x, y_boundary, linestyle='-', linewidth=2, marker=None, color='k', alpha=0.65) 
ax.plot(base_x, base_y, 'g*', alpha=0.65, markersize=10)

然后转储出来:

fancy scatter plot

关于python - 数据点颜色从预先指定的点呈放射状变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24869249/

相关文章:

python - 如何将二维查找表映射到数组(python)?

python - 将 python 输出保存到 shell 变量,类似于 perl -e

python - 滚动 Matplotlib 颜色条

pandas - IPython Notebook 单元多输出

python - 尝试获取雅虎财务数据并将其设置为数据框时出现错误

python - tktable 中的单元格为空白而不显示内容

python - 如何使用 pip 安装 Python Xlib?

python - 在 Matplotlib 3D 图中更改旋转中心

python - matplotlib show() 不能工作两次

ipython - 在笔记本上回答 Yes/No shell 提示