You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于分箱的X值(日期)为Plotly直方图应用颜色映射并复刻Matplotlib图表的对应着色效果

Got it, let's tackle your two Plotly questions one by one—they're both about adding color mapping based on x-values to histograms, which is a bit trickier than the default since Plotly's native histogram doesn't support per-bin coloring directly. Here's how to solve both:


1. Applying Color Mapping to Plotly Histograms Based on Binned X-Values

Plotly's built-in histogram trace renders all bars with the same color by default. To color each bin based on its x-value, we need to manually compute the bins and counts first, then use a bar trace instead—this lets us map each bin's x-value to a color.

Step-by-Step Solution:

  • Use numpy.histogram() to calculate bin edges and the count of values in each bin.
  • Compute the midpoint of each bin (this will be our x-axis value for the bar chart).
  • Map the bin midpoints (or edges) to a color scale using Plotly's color continuous mapping.

Example Code:

import numpy as np
import plotly.express as px

# Generate sample data
np.random.seed(42)
x_data = np.random.normal(loc=50, scale=15, size=1000)

# Compute bins and counts
counts, bin_edges = np.histogram(x_data, bins=15)
bin_midpoints = (bin_edges[:-1] + bin_edges[1:]) / 2

# Create bar chart (simulated histogram) with color mapping
fig = px.bar(
    x=bin_midpoints,
    y=counts,
    color=bin_midpoints,  # Map bin x-values to color
    color_continuous_scale='Viridis',
    labels={'x': 'X Value', 'y': 'Count'},
    title='Histogram with Color Mapping by Binned X-Value'
)

# Adjust bar width to match histogram bin size
fig.update_traces(width=np.diff(bin_edges)[0] * 0.9)

fig.show()

Key Notes:

  • width=np.diff(bin_edges)[0] * 0.9 ensures bars fit tightly like a native histogram.
  • You can swap color_continuous_scale for any Plotly color scale (e.g., 'Plasma', 'Cividis').

2. Replicating a Matplotlib Date Histogram with X-Value (Date) Coloring

For date-based histograms, the approach is similar—but we'll use pandas to handle date binning and mapping. Let's assume your Matplotlib chart uses daily/weekly date bins with color tied to the date itself.

Step-by-Step Solution:

  • Use pandas to bin your date data into intervals (e.g., daily, weekly).
  • Count the number of entries per date bin.
  • Map the date bin's midpoint (or start date) to a color scale—Plotly handles date-to-color conversion automatically.

Example Code:

import pandas as pd
import plotly.express as px
from datetime import timedelta

# Generate sample date data
start_date = pd.to_datetime('2023-01-01')
dates = [start_date + timedelta(days=np.random.randint(0, 365)) for _ in range(500)]
df = pd.DataFrame({'date': dates})

# Bin dates into weekly intervals
df['bin_start'] = df['date'].dt.to_period('W').dt.start_time
bin_counts = df.groupby('bin_start').size().reset_index(name='count')

# Create date histogram with color mapping
fig = px.bar(
    bin_counts,
    x='bin_start',
    y='count',
    color='bin_start',  # Map date bin to color
    color_continuous_scale='Blues',
    labels={'bin_start': 'Week Start', 'count': 'Number of Entries'},
    title='Date Histogram with Color Mapping by Week'
)

# Format x-axis for dates
fig.update_layout(xaxis_title='Date', xaxis_tickformat='%Y-%m-%d')

fig.show()

Key Notes:

  • Replace 'W' (weekly) with 'D' (daily) or 'M' (monthly) to match your Matplotlib chart's binning.
  • If you want to color by a date attribute (e.g., month), replace color='bin_start' with color=bin_counts['bin_start'].dt.month and use a discrete color scale.

内容的提问来源于stack exchange,提问作者j7skov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 19:22:48