我尝试使用Plotly
和Python3
来可视化包含一些异常值的数据。离群值导致色标图例看起来很糟糕:只有很少的高数据点,但图例看起来很糟糕:2k和10k之间的空间太大。在
所以问题是,如何更改右边的“颜色图例”的外观(见下图),这样它将显示0到2k之间的差异?很遗憾,无法从thisdoc文件中获取答案
示例代码(jupyter笔记本):
import numpy as np
from plotly.offline import download_plotlyjs, init_notebook_mode, iplot
from plotly.graph_objs import *
init_notebook_mode()
x = np.random.randn(100,1) + 3
y = np.random.randn(100,1) + 10
x = np.reshape(x, 100)
y = np.reshape(y, 100)
color = np.random.randint(0,1000, [100])
color[[1,3,5]] = color[[1,3,5]] + 10000 # create outliers in color var
trace = Scatter(
x = x,
y = y,
mode = 'markers',
marker=dict(
color = color,
showscale=True,
colorscale = [[0, 'rgb(166,206,227, 0.5)'],
[0.05, 'rgb(31,120,180,0.5)'],
[0.1, 'rgb(178,223,138,0.5)'],
[0.15, 'rgb(51,160,44,0.5)'],
[0.2, 'rgb(251,154,153,0.5)'],
[1, 'rgb(227,26,28,0.5)']
]
)
)
fig = Figure(data=[trace])
iplot(fig)
既然你问的是一个精确的问题,我尽量用准确的答案回答,即使我不认为这不可能是最好的数据可视化。稍后我告诉你原因。在
总之,您可以规范化颜色的值,并在更小的间隔内“压缩”数据。它在数学上表示数值e必须提高到的幂才能产生原始值。如果你更习惯使用log10。在
代码非常简单,我只附加了跟踪定义,因为其余的都没有改变。为了方便起见,我设置了一个标准cmap,因为值的间隔是连续的。在
{a1}
正如我所说的,用对数来转换价值并不总是如此。它实际上迫使观察者粗略地阅读图形。例如,尽管如此,在我的例子中橙色标记的范围在410和950之间,你能分辨出区别吗?在
您可以通过定制
colorscale
、cmin
和cmax
属性来实现我认为您所追求的目标,使其具有恰好2000的离散颜色变化。然后您可以定制colorbar.tickvals
,将边界标记为2000。见https://plot.ly/python/reference/#scatter-marker-colorbar。在新图形结果
相关问题 更多 >
编程相关推荐