根据“计数”列绘制直方图连续颜色?

Posted

技术标签:

【中文标题】根据“计数”列绘制直方图连续颜色?【英文标题】:Plotly histogram continuous colors based on "count of" column? 【发布时间】:2022-01-10 16:21:21 【问题描述】:

我创建了一个直方图,显示每十年超过 35° 摄氏度的天数(德语中的“Jahrzehnt”)。我想根据热天的数量(这里是“温度,最大值”列)给它上色,但是正如你在图片中看到的那样,最热的十年(2010 年)虽然我希望它变暗但颜色变暗了红色。

我的代码是

    fig = px.histogram(grouper, x='Jahrzehnt', y='Temperatur, Maximum', color='Temperatur, Maximum', \
        color_discrete_sequence=px.colors.sequential.Reds,
        title='Tage über 35° Celsius ("Wüstentage")',
        hover_data=dict(Jahrzehnt=False)
        )
    fig.update_layout(showlegend=False)
    fig.update_yaxes(title='Anzahl')

如何更改 color_discrete_sequence 以使其与最低值和最高值与淡红色到饱和红色相匹配?

感谢您的任何提示。

【问题讨论】:

【参考方案1】:

谢谢,我通过使用条形图而不是直方图找到了另一个答案,它允许使用连续色标按预期进行着色,如您的图中 Rob:

def wueste(df):
tag = df[df['Temperatur, Maximum'] >= 35]
grouper = tag.groupby(['Jahrzehnt'])['Temperatur, Maximum'].count()\
.to_frame()\
.reset_index()\

grouper = grouper[grouper['Temperatur, Maximum'] !=0]
 
fig = px.bar(grouper, x='Jahrzehnt', y='Temperatur, Maximum', color='Temperatur, Maximum', \
    color_continuous_scale='reds',
    title='Tage über 35° Celsius ("Wüstentage")',
    hover_data=dict(Jahrzehnt=False)
    )
fig.update_layout(showlegend=False)
fig.update_yaxes(title='Anzahl')
return fig

【讨论】:

【参考方案2】: 使用https://plotly.com/python-api-reference/generated/plotly.express.colors.htmlsample_colorscale(),您可以从连续映射构建离散序列 使用了 列表理解,并将 color 更改为 x 轴而不是 y 轴列 完整代码如下
import pandas as pd
import numpy as np
import plotly.express as px

grouper = pd.DataFrame(
    
        "Jahrzehnt": range(1870, 2011, 10),
        "Temperatur, Maximum": np.random.randint(2, 40, 15),
    
)
grouper["Jahrzehnt"] = grouper["Jahrzehnt"].astype(str) + "er"

fig = px.histogram(
    grouper,
    x="Jahrzehnt",
    y="Temperatur, Maximum",
    color="Jahrzehnt",
    color_discrete_sequence=[
        px.colors.sample_colorscale("reds", v)[0]
        for v in (
            grouper["Temperatur, Maximum"] / grouper["Temperatur, Maximum"].max()
        ).tolist()
    ],
    title='Tage über 35° Celsius ("Wüstentage")',
    hover_data=dict(Jahrzehnt=False),
)
fig.update_layout(showlegend=False)
fig.update_yaxes(title="Anzahl")

【讨论】:

以上是关于根据“计数”列绘制直方图连续颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何绘制直方图的密度而非计数? (Matplotlib)

用ggplot2直方图中另一个连续变量的平均值填充条形颜色

直方图绘制

使用自定义渐变填充直方图箱

R语言绘制常见的4种直方图

R ggplot 直方图。如何根据另一个变量更改条形的颜色?