Anonymous
Выравнивание подзасков Matplotlib один со сложенным графиком, а другой - с линейным графиком, используя Matplotlib в Pyt
Сообщение
Anonymous » 11 апр 2025, 16:44
У меня есть 2 данных данных следующим образом:
Результаты
Код: Выделить всё
{'Peak Demand PES': {2023: 124126.91,
2025: 154803.41,
2030: 231494.66,
2040: 483217.66000000003,
2050: 1004207.86},
'Peak Demand TES': {2023: 125724.8,
2025: 142959.13999999998,
2030: 186044.99000000002,
2040: 288307.99,
2050: 424827.79},
'Peak Demand DES': {2023: 125263.94,
2025: 152080.7,
2030: 219122.6,
2040: 385960.3,
2050: 671678.9}}
< /code>
df2.to_dict()
Результаты
{'Biomass PP': {2023: 783.2,
2025: 840.5,
2030: 990.5,
2040: 711.0,
2050: 167.0},
'Coal PP': {2023: 51235.8,
2025: 48912.8,
2030: 41527.8,
2040: 24125.8,
2050: 13409.8},
'Diesel PP': {2023: 10498.41,
2025: 10347.69,
2030: 9020.56,
2040: 6227.39,
2050: 3049.75},
'Geothermal PP': {2023: 1004.4,
2025: 1074.4,
2030: 1249.4,
2040: 1148.4,
2050: 328.3},
'HFO PP': {2023: 6462.1,
2025: 6358.04,
2030: 5468.59,
2040: 2521.35,
2050: 205.58},
'Large Hydro Dam PP': {2023: 28363.22,
2025: 32053.86,
2030: 41259.46,
2040: 43980.76,
2050: 32379.44},
'Natural Gas PP': {2023: 116472.48,
2025: 110897.38,
2030: 106429.18000000001,
2040: 69705.68,
2050: 8774.35},
'PumpStorage': {2023: 3721.0,
2025: 4063.0,
2030: 4918.0,
2040: 6498.0,
2050: 6498.0},
'Solar PV - Utility PP': {2023: 10422.59,
2025: 12731.45,
2030: 18576.6,
2040: 23338.15,
2050: 16738.45},
'Solar Thermal PP': {2023: 1095.0,
2025: 1095.0,
2030: 1095.0,
2040: 670.0,
2050: nan},
'Transmission': {2023: 25.83,
2025: 28.01,
2030: 33.46,
2040: 43.76,
2050: 47.56},
'Wind PP': {2023: 8193.02,
2025: 9297.62,
2030: 12193.52,
2040: 7261.3,
2050: 1735.0}}
< /code>
I want to create a sub-plot showing df1 as line plot and df2 as stacked bar plot.
I tried:
fig, ax = plt.subplots()
df1.plot(
ax = ax,
zorder = 0,
marker = "o"
)
df2.plot(ax = ax,
kind = "bar",
stacked = True,
color = color_map,
zorder = 1)
plt.legend(bbox_to_anchor = (1.1, 1))
< /code>
But i don't see the line plot:
Next, i tried this code:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
# Plot stacked bars
df2.plot(kind="bar",
stacked=True,
ax=ax,
color=color_map,
width=0.8,
position=0)
years = df1.index
offset = 0.5 # try small shifts like -0.2, 0.2, etc.
for col in df1.columns:
ax.plot([x for x in range(len(years))],
df1[col].values,
label=col,
linewidth=3,
linestyle='--',
marker='o')
# Adjust legend
handles, labels = ax.get_legend_handles_labels()
ax.legend(handles, labels, bbox_to_anchor=(1.1, 1))
plt.ylabel("GW")
plt.tight_layout()
plt.show()
< /code>
However, the x-axis is not aligned between the 2 sub-plots.
How can I fix this?
Подробнее здесь:
https://stackoverflow.com/questions/795 ... h-line-plo
1744379092
Anonymous
У меня есть 2 данных данных следующим образом: [code]df1.to_dict()[/code] Результаты [code]{'Peak Demand PES': {2023: 124126.91, 2025: 154803.41, 2030: 231494.66, 2040: 483217.66000000003, 2050: 1004207.86}, 'Peak Demand TES': {2023: 125724.8, 2025: 142959.13999999998, 2030: 186044.99000000002, 2040: 288307.99, 2050: 424827.79}, 'Peak Demand DES': {2023: 125263.94, 2025: 152080.7, 2030: 219122.6, 2040: 385960.3, 2050: 671678.9}} < /code> df2.to_dict()[/code] Результаты {'Biomass PP': {2023: 783.2, 2025: 840.5, 2030: 990.5, 2040: 711.0, 2050: 167.0}, 'Coal PP': {2023: 51235.8, 2025: 48912.8, 2030: 41527.8, 2040: 24125.8, 2050: 13409.8}, 'Diesel PP': {2023: 10498.41, 2025: 10347.69, 2030: 9020.56, 2040: 6227.39, 2050: 3049.75}, 'Geothermal PP': {2023: 1004.4, 2025: 1074.4, 2030: 1249.4, 2040: 1148.4, 2050: 328.3}, 'HFO PP': {2023: 6462.1, 2025: 6358.04, 2030: 5468.59, 2040: 2521.35, 2050: 205.58}, 'Large Hydro Dam PP': {2023: 28363.22, 2025: 32053.86, 2030: 41259.46, 2040: 43980.76, 2050: 32379.44}, 'Natural Gas PP': {2023: 116472.48, 2025: 110897.38, 2030: 106429.18000000001, 2040: 69705.68, 2050: 8774.35}, 'PumpStorage': {2023: 3721.0, 2025: 4063.0, 2030: 4918.0, 2040: 6498.0, 2050: 6498.0}, 'Solar PV - Utility PP': {2023: 10422.59, 2025: 12731.45, 2030: 18576.6, 2040: 23338.15, 2050: 16738.45}, 'Solar Thermal PP': {2023: 1095.0, 2025: 1095.0, 2030: 1095.0, 2040: 670.0, 2050: nan}, 'Transmission': {2023: 25.83, 2025: 28.01, 2030: 33.46, 2040: 43.76, 2050: 47.56}, 'Wind PP': {2023: 8193.02, 2025: 9297.62, 2030: 12193.52, 2040: 7261.3, 2050: 1735.0}} < /code> I want to create a sub-plot showing df1 as line plot and df2 as stacked bar plot. I tried: fig, ax = plt.subplots() df1.plot( ax = ax, zorder = 0, marker = "o" ) df2.plot(ax = ax, kind = "bar", stacked = True, color = color_map, zorder = 1) plt.legend(bbox_to_anchor = (1.1, 1)) < /code> But i don't see the line plot: [img]https://i.sstatic.net/4woKwnLj.png[/img] Next, i tried this code: import matplotlib.pyplot as plt fig, ax = plt.subplots() # Plot stacked bars df2.plot(kind="bar", stacked=True, ax=ax, color=color_map, width=0.8, position=0) years = df1.index offset = 0.5 # try small shifts like -0.2, 0.2, etc. for col in df1.columns: ax.plot([x for x in range(len(years))], df1[col].values, label=col, linewidth=3, linestyle='--', marker='o') # Adjust legend handles, labels = ax.get_legend_handles_labels() ax.legend(handles, labels, bbox_to_anchor=(1.1, 1)) plt.ylabel("GW") plt.tight_layout() plt.show() < /code> [img]https://i.sstatic.net/eAmRVyuv.png[/img] However, the x-axis is not aligned between the 2 sub-plots. How can I fix this? Подробнее здесь: [url]https://stackoverflow.com/questions/79568962/aligning-matplotlib-subplots-one-with-stacked-bar-plot-and-another-with-line-plo[/url]