我有一个带有颜色条图例的Plotly图表。
我想从0到100,每10个刻度。
无论我如何尝试,图表总是从10开始,到90结束,删除了我的顶部和底部。
如何确保显示顶部和底部的刻度?
MWE:
import numpy as np
import plotly.graph_objects as go
x = np.linspace(0, 1, 50)
y = np.linspace(0, 1, 50)
xx, yy = np.meshgrid(x, y)
z = 100*xx*yy
figure = go.Figure()
figure.add_trace(
go.Contour(
z=z.flatten(),
x=xx.flatten(),
y=yy.flatten(),
zmin=0,
zmax=100,
colorbar_tickvals=np.arange(0, 101, 10),
colorbar_tickmode='array',
)
)
figure.update_layout(
template="simple_white",
)
figure.show()
8条答案
按热度按时间7uzetpgm1#
根据official website,你应该加上这个。
它看起来是这样的:
更新后的代码是
根据我的经验,删除
colorbar_tickvals=np.arange(0, 101, 10),colorbar_tickmode='array',
后,图中没有变化。6jygbczu2#
我有个解决办法
这将显示给定代码的顶部和底部刻度,但请注意它只从5到95。不幸的是,我尝试修改给定的参数,这就是它对
nticks
参数的说法:希望这有帮助!
编辑:这是结果图
编辑:所以在浏览了你对这个问题的大量评论后,我意识到你想要:
基于这些假设,以下是针对您的问题的完整解决方案:
1.对于离散值:
这将为您的图生成如下离散值:
ticks
参数接受'inside'或'outside',您可以根据自己的需要使用它1.对于在颜色条中显示完整值的边:
它会产生这样的图:
我希望这最终能解决你的问题
avwztpqn3#
如果需要离散的颜色,我找到了@EricLavault的方法的替代解决方案,即交换到
heatmap
样式着色。这利用了以下事实:
go.Heatmap
显示开始和结束刻度我写了一个小函数,你可以用它来生成一个 * 离散的 * 色标,你可以用一个空的
go.Heatmap
来实现想要的结果。使用这个函数看起来像这样:
请注意,
ncontours
是离散颜色部分数量的两倍。结果:
iovurdzv4#
几乎可以肯定有更好的方法来实现这一点,但我认为您可以尝试修改
zmin
和zmax
参数。从docstring:因此,代码可以这样替换:
wsewodh25#
看看这是不是你要找的:
下面是我得到的输出:
hgncfbus6#
方案一:使用 contours 参数,正如@agcgn所指出的。
方案二:改变矩阵z的最小值和最大值,使min(z)< 0且max(z)> 100。
问题不在于传说,而在于等高线的真正含义。
您所要求的不是等高线图在plotly或其他绘图库中逻辑上可以提供的内容,给定矩阵z的当前值范围(0,100)。
A contour line ... is a curve along which the function has a constant value, so that the curve joins points of equal value.
在大小为50 × 50的矩阵z中,只有一个点z[49,49]的值为100。虽然有许多点的值为0,但它们只存在于矩阵的最顶部和最左边界。因此,从技术上讲,在矩阵“内部”不需要绘制曲线来连接值为0或100的点。
在图例上显示0和100而不直接指定等高线的唯一方法是修改矩阵z的最小最大值,使得min(z)< 0且max(z)> 100。只有这样,您才可以在轮廓中的0点之间绘制曲线<0 and of >,并在>100和<100的点之间绘制另一条曲线。
oiopk7p57#
看看(plotly.js)负责绘制colorbar的代码,我认为这是一个bug,cf。我刚刚打开的issue。
直到它被解决,你能做的最好的事情是使用“热图”轮廓着色方法(不受错误的影响),而不是默认的“填充”。等高线水平(边界)将保持不变,唯一的区别是:
如果“填充”,则在每个等高线级别之间均匀地进行着色。如果是“热图”,则在每个等高线级别之间应用热图梯度着色。
其他答案的问题在于,它们只是给予了硬编码的轮廓水平,而OP可能考虑绘制 * 任何 * 数据集的轮廓,而不仅仅是这个MWE,因此隐式使用
autocontour
(默认)。此外,在示例中,第一个级别是10,结束是90。等值线高程表示其中包含数据的区域之间的边界。通过将contour start设置为0,不仅会影响色标,而且会在点(x=0,y=0,z=0)和小于10的相邻值之间添加一个轮廓,而它们应该在同一区域中具有相同的颜色(设置
zmin=-1
和zmax=101
会导致相同的问题:硬编码,坏结果)。例如,在@agcgn的屏幕截图中,左下角出现的区域不应该存在。是的,它很小,但是看看
x = y = np.linspace(0, 1, 5)
会发生什么:该区域被着色为“小于0”,而z不包括任何负值,输出就像不可预测的一样不一致。
o3imoua48#
在Python中是一种方式;在JS中几乎相同
但正如@Levent指出的那样,没有代码,我们无法告诉你你需要什么。