Plotly: 选择不同的X轴和Y轴交叉点

3
在 Plotly 中,为了创建散点图,我通常会执行以下操作:
fig = px.scatter(df, x=x, y=y)
fig.update_xaxes(range=[2, 10])
fig.update_yaxes(range=[2, 10])

我希望y轴在x=6处与x轴相交。因此,左侧的y轴不再表示负数,而是从[2,6]。交点后,图形的右侧范围为[6,10]。

同样地,下方的y轴从[2,6]。超过x轴后,它从[6,10]。

在Plotly中如何实现?

enter image description here


1
你能画一张图片来说明吗?抱歉,我不明白你的逻辑。 - S3DEV
当然,我现在就会做。 - turtle_in_mind
1
@vestland - 就我所知,根据OP的描述,这是不可能的。你以前遇到过这种情况吗? rajn - 就我个人而言,我会将轴的值设置为所需的值,并将轴标签留在图形的左侧和底部;无论轴线在哪里,数据都将位于相同的位置。如果您喜欢,您可以使用“形状”并在图形中间绘制粗体水平和垂直线... - S3DEV
好的,这就是我所做的。 - turtle_in_mind
@S3DEV 是的,我以前在这里看到过这个。所以严格来说,这篇文章是一个重复的。但是你在这里的回答(+1)比我在另一篇文章中的回答好,所以我现在保留我的关闭投票 =) - vestland
显示剩余4条评论
2个回答

2

继续我的评论,据我所知,你现在需要的东西目前还不可用。

然而,这里有一个解决方法的例子,它使用一个shapes字典来添加水平和垂直线——作为交叉轴——放置在所需的x/y交点6处。

样本数据集:

import numpy as np

x = (np.random.randn(100)*2)+6
y1 = (np.random.randn(100)*2)+6
y2 = (np.random.randn(100)*2)+6

绘图代码示例:

import plotly.io as pio

layout = {'title': 'Intersection of X/Y Axes Demonstration'}
shapes = []
traces = []

traces.append({'x': x, 'y': y1, 'mode': 'markers'})
traces.append({'x': x, 'y': y2, 'mode': 'markers'})

shapes.append({'type': 'line', 
               'x0': 2, 'x1': 10,
               'y0': 6, 'y1': 6})
shapes.append({'type': 'line', 
               'x0': 6, 'x1': 6,
               'y0': 2, 'y1': 10})

layout['shapes'] = shapes
layout['xaxis'] = {'range': [2, 10]}
layout['yaxis'] = {'range': [2, 10]}

pio.show({'data': data, 'layout': layout})

输出:

enter image description here

评论(简要版):

这里展示的示例代码使用了低级别的Plotly API(plotly.io),而不是像graph_objectsexpress这样的便捷包装器。原因是我(个人认为)向用户展示发生在“引擎盖下”的内容比使用便捷包装器掩盖底层代码逻辑更有帮助。

这样,当用户需要修改图表的细节时,他们将更好地理解Plotly构建用于底层绘图引擎(orca)的listdict


0

我认为fig.add_hline()fig.add_vline()是你需要的函数。

示例代码

import plotly.express as px
import pandas as pd
df = pd.DataFrame({'x':[6,7,3], 'y':[4,5,6]})
fig = px.scatter(df, x='x', y='y')
fig.update_xaxes(range=[2, 10])
fig.update_yaxes(range=[2, 10])
fig.add_hline(y=4)
fig.add_vline(x=6)
fig.show()

输出 带有偏移轴的plotly


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接