我用 Pandas 构建了以下数据框:
SampleSize Mean StandardDeviation 0 5 0.134151 0.739142 1 25 -0.111257 1.154803 2 45 -0.049999 0.918167 3 65 -0.162783 1.179178 4 85 -0.097452 0.966980 5 105 -0.050559 1.161751 6 125 -0.038383 1.018117 7 145 0.086192 1.028177 8 165 0.045295 1.090246 9 185 -0.107837 1.101610 10 205 0.088160 0.967483 ... 40 805 0.020641 1.007389 41 825 0.022781 0.991498 42 845 -0.027429 0.962288 43 865 -0.105373 1.007109 44 885 -0.054397 1.015499 45 905 -0.023729 0.989168 46 925 0.025044 0.989950 47 945 0.021345 1.035740 48 965 0.023404 0.963122 49 985 0.020648 1.000148
总共 50 个随机正态样本的大小、均值和标准差。我正在尝试绘制一个facet_grid,显示与样本大小并排比较的平均值和标准差。
我当前使用的代码是:
df1 = pd.DataFrame({'SampleSize': range(5, SAMPLE_SIZE, 20), 'Mean': means, 'StandardDeviation': stdev}) df1_melted = pd.melt(df1, id_vars=['SampleSize'], var_name='SampleSize', value_name='Value') ggplot(df1_melted, aes(x='SampleSize', y='Value', color='SampleSize')) + \ geom_line() + \ geom_point() + \ facet_grid('SampleSize ~ .') + \ labs(x='SampleSize', y='Mean and StandardDeviation')
这导致:
... /usr/lib/python3.7/site-packages/pandas/core/internals/blocks.py in new_block(values, placement, ndim, klass) 1935 1936 values, _ = extract_pandas_array(values, None, ndim) -> 1937 check_ndim(values, placement, ndim) 1938 1939 if klass is None: /usr/lib/python3.7/site-packages/pandas/core/internals/blocks.py in check_ndim(values, placement, ndim) 1978 if len(placement) != len(values): 1979 raise ValueError( -> 1980 f"Wrong number of items passed {len(values)}, " 1981 f"placement implies {len(placement)}" 1982 ) ValueError: Wrong number of items passed 2, placement implies 1
我对哪里出了问题感到困惑,因为当我分别绘制两张图时它起作用了。
在你的代码中,你试图在一个 facet_grid 中同时显示两个变量(”Mean” 和 “StandardDeviation”),这可能导致出现错误。facet_grid 通常用于将一个变量的不同水平按行或列分组显示。如果你想同时显示均值和标准差,可以考虑创建两个不同的 facet_grid,或者使用其他方式来可视化这两个变量。
下面是一种可能的解决方案,将均值和标准差分别绘制在两个 facet_grid 中:
import pandas as pd from plotnine import * # 你的数据框 data = { 'SampleSize': list(range(5, 1000, 20)), 'Mean': [0.134151, -0.111257, -0.049999, -0.162783, -0.097452, -0.050559, -0.038383, 0.086192, 0.045295, -0.107837, 0.088160], 'StandardDeviation': [0.739142, 1.154803, 0.918167, 1.179178, 0.966980, 1.161751, 1.018117, 1.028177, 1.090246, 1.101610, 0.967483] } df = pd.DataFrame(data) # 绘制均值的 facet_grid p1 = (ggplot(df, aes(x='SampleSize', y='Mean')) + geom_line() + geom_point() + labs(x='SampleSize', y='Mean') + facet_grid('~ .')) # 绘制标准差的 facet_grid p2 = (ggplot(df, aes(x='SampleSize', y='StandardDeviation')) + geom_line() + geom_point() + labs(x='SampleSize', y='StandardDeviation') + facet_grid('~ .')) # 显示两个图表 print(p1) print(p2)
这段代码将均值和标准差分别绘制在两个 facet_grid 中,让你可以分开比较它们。希望这可以帮助你解决问题!