【发布时间】:2021-01-03 01:22:44
【问题描述】:
我正在尝试制作成本(以卢比为单位)和装机容量(以兆瓦为单位)的箱线图,其中 xaxis 作为可再生能源的份额(以 % 为单位)。
也就是说,每个 x 刻度都与两个箱线图相关联,一个是成本,一个是装机容量。我有 3 个 xtick 值 (20%, 40%, 60%)。
我尝试了this answer,但我得到了附加在底部的错误。
每个xtick 需要两个箱线图。
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
plt.rcParams["font.family"] = "Times New Roman"
plt.style.use('seaborn-ticks')
plt.grid(color='w', linestyle='solid')
data1 = pd.read_csv('RES_cap.csv')
df=pd.DataFrame(data1, columns=['per','cap','cost'])
cost= df['cost']
cap=df['cap']
per_res=df['per']
fig, ax1 = plt.subplots()
xticklabels = 3
ax1.set_xlabel('Percentage of RES integration')
ax1.set_ylabel('Production Capacity (MW)')
res1 = ax1.boxplot(cost, widths=0.4,patch_artist=True)
for element in ['boxes', 'whiskers', 'fliers', 'means', 'medians', 'caps']:
plt.setp(res1[element])
for patch in res1['boxes']:
patch.set_facecolor('tab:blue')
ax2 = ax1.twinx() # instantiate a second axes that shares the same x-axis
ax2.set_ylabel('Costs', color='tab:orange')
res2 = ax2.boxplot(cap, widths=0.4,patch_artist=True)
for element in ['boxes', 'whiskers', 'fliers', 'means', 'medians', 'caps']:
plt.setp(res2[element], color='k')
for patch in res2['boxes']:
patch.set_facecolor('tab:orange')
ax1.set_xticklabels(['20%','40%','60%'])
fig.tight_layout()
plt.show()
样本数据: data attached
【问题讨论】:
-
您可以使用
ax.set_ylim()和ax.set_yticks()来对齐两个轴的刻度 -
错误是什么?我们没有您的数据,所以这可能是预期的图表。我们怎么知道?
-
请不要将数据/代码/错误消息作为图片发布。您在互联网上向陌生人寻求帮助。您真的希望他们从图像中输入您的数据吗?除此之外 - 图像不包含数据类型。某些函数对 str(2)、float(2) 和 int(2) 的处理完全不同,但在图像中可能看起来相同。
-
首先,欢迎来到 SO。正如the guidelines 中解释的那样,您应该通过creating an example 帮助我们重现您的问题,我们可以轻松使用,here 是有关如何执行此操作的一些提示。但是我理解您遇到的麻烦,因为我看到您已经直接跳入了 Python 绘图的深层。所以我在下面发布了一个带有假数据的答案,希望对您有所帮助。
-
我很抱歉将问题与数据一起发布为图像,并且对于我遇到的错误也不是很准确。我应该通过stackoverflow.com/help/minimal-reproducible-example。
标签: python matplotlib boxplot