【问题标题】:Plotly Python - Y Ticks in Wrong OrderPlotly Python - Y 标记顺序错误
【发布时间】:2021-10-08 04:39:48
【问题描述】:

我有一个数据集,我正在使用 python 绘图,并且由于某种原因,y 轴刻度的顺序错误。当 y 轴上的值减小时,图表上的线会变高。

以下是数据集结构的一个小示例:

dfmeds = 

Start       Name                Medication  End           Dose
2020-12-09  Yosemite Sam        Lexapro     2021-06-30    5
2020-12-10  Yosemite Sam        Lexapro     2021-06-30    5
2020-12-11  Yosemite Sam        Lexapro     2021-06-30    5
2020-12-12  Yosemite Sam        Lexapro     2021-06-30    5
2020-12-13  Yosemite Sam        Lexapro     2021-06-30    5
2020-12-14  Yosemite Sam        Lexapro     2021-06-30    5
2020-12-15  Yosemite Sam        Lexapro     2021-06-30    4
2020-12-16  Yosemite Sam        Lexapro     2021-06-30    4
2020-12-17  Yosemite Sam        Lexapro     2021-06-30    4
2020-12-18  Yosemite Sam        Lexapro     2021-06-30    4
2020-12-19  Yosemite Sam        Lexapro     2021-06-30    4
2020-12-20  Yosemite Sam        Lexapro     2021-06-30    3
2020-12-21  Yosemite Sam        Lexapro     2021-06-30    3
2020-12-22  Yosemite Sam        Lexapro     2021-06-30    3
2020-12-23  Yosemite Sam        Lexapro     2021-06-30    3
2020-12-24  Yosemite Sam        Lexapro     2021-06-30    3
2020-12-25  Yosemite Sam        Lexapro     2021-06-30    2
2020-12-26  Yosemite Sam        Lexapro     2021-06-30    2
2020-12-27  Yosemite Sam        Lexapro     2021-06-30    2
2020-12-28  Yosemite Sam        Lexapro     2021-06-30    2

以及我用来创建图表的代码...

    fig2 = px.line(dfmeds, x='Start', y="Dose", color = "Medication",
        # labels={"Episode_Count": tally + " per Shift",
        #         "Target":"Target",
        #         "Yr_Mnth": "Date" },
        title="Medication Dosages")
    fig2.update_xaxes(tickangle=45,)
    fig2.update_yaxes(tickmode='linear')
    fig2.update_layout(template = 'plotly_white',hovermode="x unified")

令人沮丧的是,这是我的输出:

特别注意绿色痕迹。有没有哪位好心人在网络编年史中遇到过这种奇怪的现象?!我查看了 y-ticks 的文档,但找不到任何控制顺序的方法...

############################# 编辑################# #################

正如两个人在 cmets 中指出的那样,缺少数字顺序的原因是“剂量”列作为对象传入,因此被作为分类处理。

所以我把 dtype 改成了 numeric 来寻址:

    dfmeds["Dose"] = pd.to_numeric(dfmeds["Dose"])

虽然这引入了一个新问题,但由于剂量值的范围很大,y 轴的刻度全部聚集在一起:

我觉得我应该能够通过格式化 y 刻度来解决这个问题,尽管最好的情况是保留分类输入并控制顺序,因为可以在 y 轴上清楚地看到每个跟踪的值.

如果有人有任何建议,他们将不胜感激。

【问题讨论】:

  • 您的Dose 列是否有可能是字符串(即object in df.info())?如果是这样,它们之间就没有关系('300' 与 '1' 的距离与 '299' 的距离一样远)
  • dfmeds['Dose']的类型是什么?
  • 你们说的都对,它是作为对象传入的!虽然当我转换为数字时,它引入了一个新问题......如果你有兴趣看看,我已经在上面添加了一个编辑。

标签: python pandas dataframe plotly plotly-dash


【解决方案1】:

正如 cmets 部分指出的那样,问题的一部分是 y 轴值作为对象传入,因此被分类处理。

通过将 dfmeds['Dose'] 转换为数字很容易解决,在我的情况下,我还必须从一些单元格中提取文本,这也在第一行中处理:

#strip non numeric characters
dfmeds['Dose'] = dfmeds['Dose'].str.extract('(\d+)', expand=False)
#convert to numeric
dfmeds['Dose'] = pd.to_numeric(dfmeds['Dose'])

“编辑”中提到的问题是我将“tickmode”设置为线性。这也很容易通过删除来解决:

fig2.update_yaxes(tickmode='linear')

我希望这可以帮助其他一些需要帮助的可怜人,祝编程愉快!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多