首页 > 编程问答 >无法向第二个 X 轴添加垂直线

无法向第二个 X 轴添加垂直线

时间:2024-07-23 11:38:45浏览次数:10  
标签:python pandas plotly

我可以向第二个 Y 轴添加一条水平线,如下所示:

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go

df = pd.DataFrame(
    {
        "A": [5, 4, 7],
        "B": [200, 300, 100],
    },
    index=[1, 2, 3],
)

fig = px.bar(
    df["A"],
    orientation="v",
)

fig.add_trace(
    go.Scatter(
        x=df.index,
        y=df["B"],
        yaxis="y2",
        name="B",
    )
)

fig.add_hline(
    y=df["B"].mean(),
    yref="y2",
)

fig.update_layout(
    xaxis_title=None,
    yaxis_title=None,
    legend_title=None,
    xaxis=dict(
        autorange="reversed",
    ),
    yaxis=dict(
        side="left",
        showgrid=False,
    ),
    yaxis2=dict(
        overlaying="y",
        side="right",
        showgrid=False,
    ),
)

fig.show()

horizontal line

但是,我无法向第二个 X 轴添加一条垂直线:

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go

df = pd.DataFrame(
    {
        "A": [5, 4, 7],
        "B": [200, 300, 100],
    },
    index=[1, 2, 3],
)

fig = px.bar(
    df["A"],
    orientation="h",
)

fig.add_trace(
    go.Scatter(
        y=df.index,
        x=df["B"],
        xaxis="x2",
        name="B",
    )
)

fig.add_vline(
    x=df["B"].mean(),
    xref="x2",
)

fig.update_layout(
    xaxis_title=None,
    yaxis_title=None,
    legend_title=None,
    yaxis=dict(
        autorange="reversed",
    ),
    xaxis=dict(
        side="top",
        showgrid=False,
    ),
    xaxis2=dict(
        overlaying="x",
        side="bottom",
        showgrid=False,
    ),
)

fig.show()

vertical line


这个错误的原因是你在 go.Scatter 轨迹中将 y 设置为 df.index ,而你的 xaxis2 是根据 df["B"] 的值的。当你尝试添加一条垂直线到 xref="x2" 时,它会寻找与 df.index 中的值相对应的位置,而这些值并不存在于第二个 X 轴上。

为了解决这个问题,你需要为你的 go.Scatter 轨迹创建一个与 df["B"] 的值相对应的新的 x 值数组。你可以使用 np.arange() 来做到这一点,它会创建一个从 0 到 df["B"] 长度的数组。

以下是修改后的代码:

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import numpy as np

df = pd.DataFrame(
    {
        "A": [5, 4, 7],
        "B": [200, 300, 100],
    },
    index=[1, 2, 3],
)

fig = px.bar(
    df["A"],
    orientation="h",
)

fig.add_trace(
    go.Scatter(
        y=np.arange(len(df["B"])),  # 使用 np.arange() 创建新的 x 值
        x=df["B"],
        xaxis="x2",
        name="B",
    )
)

fig.add_vline(
    x=df["B"].mean(),
    xref="x2",
)

fig.update_layout(
    xaxis_title=None,
    yaxis_title=None,
    legend_title=None,
    yaxis=dict(
        autorange="reversed",
    ),
    xaxis=dict(
        side="top",
        showgrid=False,
    ),
    xaxis2=dict(
        overlaying="x",
        side="bottom",
        showgrid=False,
    ),
)

fig.show()

这个修改后的代码应该能够正确地在第二个 X 轴上添加一条垂直线。

标签:python,pandas,plotly
From: 78781464

相关文章

  • 使用 Python 通过逻辑应用运行长时间运行的 Azure Functions
    我已经尝试解决这个问题有一段时间了,但我似乎找不到解决方案。因此,正如标题所示,我试图通过函数在逻辑应用程序中运行长时间运行的操作。我有一个python代码,可以比较2个excel文件并进行一些转换。它工作正常,但是,Excel文件包含近20k行(它是动态的,将来会添加更多行),因此......
  • 使用递归函数计算阶乘时,我在 python 中遇到类型错误
    defcalc_fact(n):如果(n==1或n==0):返回1别的:n*calc_fact(n-1)print(calc_fact(5))试图创建函数来计算阶乘,不支持类型错误操作数*:对于int或Nonetype我不知道为什么谢谢Python代码中出现“类型错误:不支持的操作数类型为*:'int'和'NoneType'”表明你......
  • 如何调试 python Flask [84] [CRITICAL] WORKER TIMEOUT?
    调试:gtts.tts:保存到temp.mp37月22日09:10:56PM[2024-07-2215:40:56+0000][84][严重]工作超时(pid:87)|||7月22日09:10:56PM[2024-07-2215:40:56+0000][87][INFO]工人退出(pid:87)7月22日09:10:57PM[2024-07-2215:40:57+0000][95][INF......
  • 类型错误:无法将函数返回值转换为 Python 类型!签名是 () -> 处理 anaconda spider
    这是代码:importosimportrandomimportnumpyasnpimportpandasaspdimporttensorflowastffromtensorflow.kerasimportbackendasKfromtensorflow.keras.layersimportDense,Dropout,Flatten,Conv2D,MaxPool2D,Input......
  • python进阶---闭包与装饰器
    一、闭包        在Python中,闭包是指一个函数内部定义的函数,这个内部函数可以访问并修改其外部函数的局部变量,即使外部函数已经执行完毕。闭包可以通过多层函数嵌套来实现。    闭包的三要素:    1、外部函数嵌套内部函数    2、外部函数返......
  • 强制从当前包自动导入的 Python 以此包的名称为前缀
    我在VSCode中使用Python和Pylance扩展。在我正在编辑的自己的包中,自动添加的导入(设置“导入格式:绝对”)如下所示:frommydirectory.myfileimportmyclass但是,我的Python包正在被被一个(非常愚蠢且不可协商的)外部系统消耗,该系统拒绝正确解释它,除非导入的格式特别......
  • Python语言-面向对象
    知识代码classJobSalary(object):job=''def__init__(self,city):self.jobname="数据分析师"self.exp=''self.city=city#方法defdata_normalize(self,data):print(f'正在规范化......
  • 需要帮助使用 Selenium Python 单击 Microsoft Teams 按钮
    我将Python与Selenium结合使用,并自动登录MicrosoftTeams。进入后,弹出窗口显示我需要单击“立即切换”以切换到V2版本。我似乎无法使用SeleniumPython成功单击此按钮。谁能帮我自动点击这个按钮?这是我不成功的尝试:self.driver.find_element(By.CLASS_NAME,......
  • python接口自动化(四十)- logger 日志 - 下(超详解)
    宏哥微信粉丝群:https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介按照上一篇的计划,这一篇给小伙伴们讲解一下:(1)多模块使用logging,(2)通过文件配置logging模块,(3)自己封装一个日志(logging)类。可能有的小伙伴在这里会有个疑问一个logging为什么分两篇的篇幅......
  • Python面试题:使用NumPy进行高效数组运算
    NumPy是Python中进行高效数组运算的基础库。以下是一些示例,展示了如何使用NumPy进行高效的数组运算,包括创建数组、数组操作、数学运算以及一些高级操作。安装NumPy如果你还没有安装NumPy,可以通过以下命令进行安装:pipinstallnumpy示例代码1.创建数组import......