我一直在尝试发布一些类似的解决方案,以便运气不佳。
我正在尝试获取制造过程中所有List<CTITools> tools;
tools = Arrays.asList(
new CTITools("DFC"),
new CTITools("AgentInfo"),
new CTITools("Customer"));
new CTITools("Wiki"));
Grid<CTITools> grid = new Grid<>();
grid.setItems(tools);
grid.addColumn(CTITools::getTool).setCaption("Tool");
的{{1}}的直方图。每个零件有不同的步骤数,因此我想在每个零件的一个图/图像上具有一组直方图。
在我的真实数据中,有很多部分,因此,如果这可以遍历许多部分并保存理想的图形。
此外,对于要覆盖在直方图上的每个步骤,我们都有一个目标成本。这在单独的数据框中表示。我陷入了子图的循环中,所以我还没有尝试过。
到目前为止,这是我的代码:
Cost
预先感谢您对我的帮助!
这是我想在直方图上显示为垂直线的Step No
:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel('Dist_Example.xlsx')
df1 = df[~df['Cost Type'].isin(['Material'])]
number_of_subplots = len(df1['Step No'].unique())
steps = df1['Step No'].unique()
fig, axs = plt.subplots(1, number_of_subplots, sharey = True, tight_layout=True)
for step in steps:
df2 = df1[df1['Step No'].isin([step])]
axs[step].hist(df2['Cost'])
plt.show()
以下是一些示例历史数据,应放在直方图的bin中:
Target Cost
还有第二个样本数据集:
PartNo StepNo TargetCost
ABC 10 12
ABC 20 20
ABC 30 13
答案 0 :(得分:0)
您将找不到可以直接为数据集解决此问题的直方图函数。您需要以适合自己需求的方式汇总数据,然后用条形图表示结果。
我发现您的目标和数据有点令人困惑,但是我认为在给出这些假设之后,我已经弄清了您的想法:
剧情
编辑
这不是OP想要的。经过一番来回的摸索,我们发现了一个似乎可行的解决方案
(从问题开始)我正在尝试获取所有步骤号的成本直方图
(来自评论)我实际上想对每个步骤中每个序列号的成本之和有一个直方图。
由于直方图中的y轴上必须有count
或频率,因此您必须以某种有意义的方式汇总数据。在下面,您将看到在每个步骤中每个SerialNO的合计成本的选择箱数计数。
结果:
代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
import pylab
# Load data in two steps:
# df1 = pd.read_clipboard(sep='\\s+')
# Part No Serial No Step No Cost Type Cost
# ABC 123 10 Labor 11
# ABC 123 10 Material 16
# ABC 456 10 Labor 21
# ABC 456 10 Material 26
# ...
# df2 = pd.read_clipboard(sep='\\s+')
# Part No Step No Target Cost
# ABC 10 12
# ABC 20 20
# ABC 30 13
# Cost type and SerialNo irrelevant
df11 = df1.drop(['CostType'] , axis = 1)
# Aggregate by StepNo, find total cost and count
##df12 = df11.groupby(['PartNo', 'StepNo']).agg(['sum', 'count']).reset_index()
df12 = df11.groupby(['PartNo', 'StepNo', 'SerialNo']).agg(['sum', 'count']).reset_index()
df12.columns = ['PartNo', 'StepNo', 'SerialNo', 'Cost', 'Count']
df3 = pd.merge(df2, df12, how = 'left', on = ['PartNo', 'StepNo'])
# Calculate total target cost
df3['TargetTotal'] = df3['TargetCost']*df3['Count']
# pylab.rcParams['figure.figsize'] = (2, 1)
def multiHist(x_data, x_label, bins):
# Hisrogram setup
fig, ax = plt.subplots()
ax.hist(x_data, bins=bins, color='blue', alpha=0.5, histtype='stepfilled')
# Horizontal line
x0 = dfs['TargetTotal'].iloc[0]
ax.axvline(x0, color='red', linewidth=2)
# Annotation
ax.annotate('Target: {:0.2f}'.format(x0), xy=(x0, 1), xytext=(-15, 15),
xycoords=('data', 'axes fraction'), textcoords='offset points',
horizontalalignment='left', verticalalignment='center',
arrowprops=dict(arrowstyle='-|>', fc='white', shrinkA=0, shrinkB=0,
connectionstyle='angle,angleA=0,angleB=90,rad=10'),)
# Labels
ax.set_xlabel(x_label, color = 'grey')
ax.legend(loc='upper left')
plt.show()
# Identify and plot data for each StepNo
for step in df3['StepNo'].unique():
dfs = df3[df3['StepNo']==step]
# Data to plot
cost = dfs['Cost']
labels = 'Part: ' + dfs['PartNo'].iloc[0] + ', ' 'Step:' + str(dfs['StepNo'].iloc[0])
# Plot
multiHist(x_data = cost, x_label = labels, bins = 4)