亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

組合條形圖和線圖的問題(python)

組合條形圖和線圖的問題(python)

炎炎設計 2022-08-25 15:21:05
我有這樣的數據幀:df_meshX_min_select = pd.DataFrame({'Number of Elements'  : [5674, 8810,13366,19751,36491],'Time (a)'            : [42.14, 51.14, 55.64, 55.14, 56.64],'Different Result(Temperature)' : [0.083849, 0.057309, 0.055333, 0.060516, 0.035343]})我試圖在同一圖中組合條形圖(元素數與不同結果)和線圖(元素數與時間),但我發現了以下問題:在組合 2 個圖時,x_value似乎不匹配,但是如果您看到數據框,則 x 值完全相同。我的期望是將這兩個圖組合成1個數字: 這是我做的代碼:import numpy as npimport pandas as pdimport seaborn as snsimport matplotlib.pyplot as pltimport matplotlib.ticker as tickerdf_meshX_min_select = pd.DataFrame({    'Number of Elements'  : [5674, 8810,13366,19751,36491],    'Time (a)'            : [42.14, 51.14, 55.64, 55.14, 56.64],    'Different Result(Temperature)' : [0.083849, 0.057309, 0.055333, 0.060516, 0.035343]})x1= df_meshX_min_select["Number of Elements"]t1= df_meshX_min_select["Time (a)"]T1= df_meshX_min_select["Different Result(Temperature)"]#Create combo chartfig, ax1 = plt.subplots(figsize=(10,6))color = 'tab:green'#bar plot creationax1.set_title('Mesh Analysis', fontsize=16)ax1.set_xlabel('Number of elements', fontsize=16)ax1.set_ylabel('Different Result(Temperature)', fontsize=16)ax1 = sns.barplot(x='Number of Elements', y='Different Result(Temperature)', data = df_meshX_min_select)ax1.tick_params(axis='y')#specify we want to share the same x-axisax2 = ax1.twinx()color = 'tab:red'#line plot creationax2.set_ylabel('Time (a)', fontsize=16)ax2 = sns.lineplot(x='Number of Elements', y='Time (a)', data = df_meshX_min_select, sort=False, color=color, ax=ax2)ax2.tick_params(axis='y', color=color)#show plotplt.show()任何人都可以幫我,請?
查看完整描述

2 回答

?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

Seaborn 和 pandas 對條形圖(內部編號為 0,1,2,...)使用分類 x 軸,對線圖使用浮點數。請注意,您的 x 值不是均勻分布的,因此條形圖之間會有奇怪的距離,或者不會與線圖中的 x 值對齊。


下面是一個使用標準 matplotlib 來組合兩個圖形的解決方案。


import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import matplotlib.ticker as ticker


df_meshx_min_select = pd.DataFrame({

    'number of elements': [5674, 8810, 13366, 19751, 36491],

    'time (a)': [42.14, 51.14, 55.64, 55.14, 56.64],

    'different result(temperature)': [0.083849, 0.057309, 0.055333, 0.060516, 0.035343]})

x1 = df_meshx_min_select["number of elements"]

t1 = df_meshx_min_select["time (a)"]

d1 = df_meshx_min_select["different result(temperature)"]


fig, ax1 = plt.subplots(figsize=(10, 6))

color = 'limegreen'

ax1.set_title('mesh analysis', fontsize=16)

ax1.set_xlabel('number of elements', fontsize=16)

ax1.set_ylabel('different result(temperature)', fontsize=16, color=color)

ax1.bar(x1, height=d1, width=2000, color=color)

ax1.tick_params(axis='y', colors=color)


ax2 = ax1.twinx()  # share the x-axis, new y-axis

color = 'crimson'

ax2.set_ylabel('time (a)', fontsize=16, color=color)

ax2.plot(x1, t1, color=color)

ax2.tick_params(axis='y', colors=color)


plt.show()

在此輸入圖像描述

查看完整回答
反對 回復 2022-08-25
?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

我正在用線圖繪制一個箱線圖,即使我的兩個x軸相同,我也遇到了同樣的問題,所以我解決了將x軸特征轉換為類型字符串的問題:

df_meshX_min_select['Number of Elements'] = df_meshX_min_select['Number of Elements'].astype('string')

通過這種方式,情節使用seaborn工作:

在此輸入圖像描述


查看完整回答
反對 回復 2022-08-25
  • 2 回答
  • 0 關注
  • 126 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號