我有一个函数free_vs_paid(df_clean),它生成一个Plotly bar chart,比较不同类别的免费和付费应用程序的数量.在Jupyter Notebook中,图表正确地显示y轴刻度(1, 10, 100,1000),如下图所示.我知道这个问题来自yaxis=dict(type='log')).如何让我的yaxis更专业?

enter image description here

然而.当我将相同的函数集成为my Streamlit app时,y轴刻度显示为中间数字,如图所示.

enter image description here

下面是我代码的相关部分:

import pandas as pd
import plotly.express as px

def free_vs_paid(df_clean):
    df_free_vs_paid = df_clean.groupby(["Category","Type"], as_index=False).agg({"App": pd.Series.count})
    df_free_vs_paid.sort_values("App", ascending=False, inplace=True)

    freevsPaid_bar = px.bar(df_free_vs_paid,
                   x="Category",
                   y="App",
                   color="Type",
                   title="Free vs Paid Apps by Category",
                   barmode="group")

    freevsPaid_bar .update_layout(xaxis_title='Category',
                        yaxis_title='Number of Apps',
                        xaxis={'categoryorder':'total descending'},
                        yaxis=dict(type='log'))

    return freevsPaid_bar 

如何确保Y轴刻度在我的Streamlit应用程序中正确显示,就像在Mystyter Notebook中一样?

Updated

我已经解决了这个问题的变化yaxis.

   yaxis={'type': 'log',
         'tickvals': [1, 10, 100, 1000],
         ticktext': ['1', '10', '100', '1000']})

然而,有没有更好的解决办法呢?

Thank you in advance for your help!

推荐答案

您可以通过相应地设置轴dtick来实现这一点.

dtick—设置此轴上刻度之间的步长.使用tick0必须 一个正数,或可用于"log"和"date"的特殊字符串 斧头.如果轴type是"log",则每 10 ^(n "dtick),其中n是tick数.例如,要设置刻度, 标记1,10,dtickdtick0,...设置dtick为1.

fig.update_yaxes(dtick=1)

Python相关问答推荐

如何在Python中使用io.BytesIO写入现有缓冲区?

Pandas 填充条件是另一列

如何使用scipy从频谱图中回归多个高斯峰?

Python json.转储包含一些UTF-8字符的二元组,要么失败,要么转换它们.我希望编码字符按原样保留

在线条上绘制表面

Polars:用氨纶的其他部分替换氨纶的部分

基于字符串匹配条件合并两个帧

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

Pandas Loc Select 到NaN和值列表

使用groupby方法移除公共子字符串

启动带有参数的Python NTFS会导致文件路径混乱

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

在Admin中显示从ManyToMany通过模型的筛选结果

获取git修订版中每个文件的最后修改时间的最有效方法是什么?

Python OPCUA,modbus通信代码运行3小时后出现RuntimeError

我怎么才能用拉夫分拣呢?

将像素信息写入文件并读取该文件

大型稀疏CSR二进制矩阵乘法结果中的错误

用LAKEF划分实木地板AWS Wrangler

将时间序列附加到数据帧