1

我想将 catplot 与 subplot 结合起来。但这似乎是不可能的:

%pylab inline
import pandas as pd
import seaborn as sns; sns.set()
df = pd.DataFrame({'dt': {0: '2020-02-01', 1: '2020-02-01', 2: '2020-02-02', 3: '2020-02-02', 4: '2020-02-03', 5: '2020-02-03', 6: '2020-02-04', 7: '2020-02-04', 8: '2020-02-05', 9: '2020-02-05', 10: '2020-02-06', 11: '2020-02-06', 12: '2020-02-07', 13: '2020-02-07', 14: '2020-02-08', 15: '2020-02-08', 16: '2020-02-09', 17: '2020-02-09', 18: '2020-02-10', 19: '2020-02-10', 20: '2020-02-11', 21: '2020-02-11', 22: '2020-02-12', 23: '2020-02-12', 24: '2020-02-13', 25: '2020-02-13', 26: '2020-02-14', 27: '2020-02-14', 28: '2020-02-15', 29: '2020-02-15', 30: '2020-02-16', 31: '2020-02-16', 32: '2020-02-17', 33: '2020-02-17', 34: '2020-02-18', 35: '2020-02-18', 36: '2020-02-19', 37: '2020-02-19', 38: '2020-02-20', 39: '2020-02-20', 40: '2020-02-21', 41: '2020-02-21', 42: '2020-02-22', 43: '2020-02-22', 44: '2020-02-23', 45: '2020-02-23', 46: '2020-02-24', 47: '2020-02-24', 48: '2020-02-25', 49: '2020-02-25', 50: '2020-02-26', 51: '2020-02-26', 52: '2020-02-27', 53: '2020-02-27', 54: '2020-02-28', 55: '2020-02-28', 56: '2020-02-29', 57: '2020-02-29', 58: '2020-03-01', 59: '2020-03-01', 60: '2020-03-02', 61: '2020-03-02', 62: '2020-03-03', 63: '2020-03-03', 64: '2020-03-04', 65: '2020-03-04', 66: '2020-03-05', 67: '2020-03-05', 68: '2020-03-06', 69: '2020-03-06', 70: '2020-03-07', 71: '2020-03-07', 72: '2020-03-08', 73: '2020-03-08', 74: '2020-03-09', 75: '2020-03-09', 76: '2020-03-10', 77: '2020-03-10', 78: '2020-03-11', 79: '2020-03-11', 80: '2020-03-12', 81: '2020-03-12', 82: '2020-03-13', 83: '2020-03-13', 84: '2020-03-14', 85: '2020-03-14', 86: '2020-03-15', 87: '2020-03-15', 88: '2020-03-16', 89: '2020-03-16', 90: '2020-03-17', 91: '2020-03-17', 92: '2020-03-18', 93: '2020-03-18', 94: '2020-03-19', 95: '2020-03-19', 96: '2020-03-20', 97: '2020-03-20', 98: '2020-03-21', 99: '2020-03-21', 100: '2020-03-22', 101: '2020-03-22', 102: '2020-03-23', 103: '2020-03-23', 104: '2020-03-24', 105: '2020-03-24', 106: '2020-03-25', 107: '2020-03-25', 108: '2020-03-26', 109: '2020-03-26', 110: '2020-03-27', 111: '2020-03-27', 112: '2020-03-28', 113: '2020-03-28', 114: '2020-03-29', 115: '2020-03-29', 116: '2020-03-30', 117: '2020-03-30', 118: '2020-03-31', 119: '2020-03-31', 120: '2020-04-01', 121: '2020-04-01', 122: '2020-04-02', 123: '2020-04-02', 124: '2020-04-03', 125: '2020-04-03', 126: '2020-04-04', 127: '2020-04-04', 128: '2020-04-05', 129: '2020-04-05', 130: '2020-04-06', 131: '2020-04-06', 132: '2020-04-07', 133: '2020-04-07', 134: '2020-04-08', 135: '2020-04-08', 136: '2020-04-09', 137: '2020-04-09', 138: '2020-04-10', 139: '2020-04-10', 140: '2020-04-11', 141: '2020-04-11', 142: '2020-04-12', 143: '2020-04-12', 144: '2020-04-13', 145: '2020-04-13', 146: '2020-04-14', 147: '2020-04-14', 148: '2020-04-15', 149: '2020-04-15', 150: '2020-04-16', 151: '2020-04-16', 152: '2020-04-17', 153: '2020-04-17', 154: '2020-04-18', 155: '2020-04-18', 156: '2020-04-19', 157: '2020-04-19', 158: '2020-04-20', 159: '2020-04-20', 160: '2020-04-21', 161: '2020-04-21', 162: '2020-04-22', 163: '2020-04-22', 164: '2020-04-23', 165: '2020-04-23', 166: '2020-04-24', 167: '2020-04-24', 168: '2020-04-25', 169: '2020-04-25', 170: '2020-04-26', 171: '2020-04-26', 172: '2020-04-27', 173: '2020-04-27', 174: '2020-04-28', 175: '2020-04-28', 176: '2020-04-29', 177: '2020-04-29', 178: '2020-04-30', 179: '2020-04-30', 180: '2020-05-01', 181: '2020-05-01', 182: '2020-05-02', 183: '2020-05-02', 184: '2020-05-03', 185: '2020-05-03', 186: '2020-05-04', 187: '2020-05-04', 188: '2020-05-05', 189: '2020-05-05', 190: '2020-05-06', 191: '2020-05-06', 192: '2020-05-07', 193: '2020-05-07', 194: '2020-05-08', 195: '2020-05-08', 196: '2020-05-09', 197: '2020-05-09', 198: '2020-05-10', 199: '2020-05-10', 200: '2020-05-11', 201: '2020-05-11', 202: '2020-05-12', 203: '2020-05-12', 204: '2020-05-13', 205: '2020-05-13'}, 'gender': {0: 'male', 1: 'female', 2: 'male', 3: 'female', 4: 'male', 5: 'female', 6: 'male', 7: 'female', 8: 'male', 9: 'female', 10: 'male', 11: 'female', 12: 'male', 13: 'female', 14: 'male', 15: 'female', 16: 'male', 17: 'female', 18: 'male', 19: 'female', 20: 'male', 21: 'female', 22: 'female', 23: 'male', 24: 'male', 25: 'female', 26: 'male', 27: 'female', 28: 'female', 29: 'male', 30: 'male', 31: 'female', 32: 'female', 33: 'male', 34: 'female', 35: 'male', 36: 'male', 37: 'female', 38: 'male', 39: 'female', 40: 'male', 41: 'female', 42: 'female', 43: 'male', 44: 'male', 45: 'female', 46: 'male', 47: 'female', 48: 'male', 49: 'female', 50: 'female', 51: 'male', 52: 'female', 53: 'male', 54: 'female', 55: 'male', 56: 'female', 57: 'male', 58: 'male', 59: 'female', 60: 'male', 61: 'female', 62: 'male', 63: 'female', 64: 'female', 65: 'male', 66: 'male', 67: 'female', 68: 'female', 69: 'male', 70: 'female', 71: 'male', 72: 'female', 73: 'male', 74: 'male', 75: 'female', 76: 'female', 77: 'male', 78: 'male', 79: 'female', 80: 'male', 81: 'female', 82: 'male', 83: 'female', 84: 'female', 85: 'male', 86: 'female', 87: 'male', 88: 'male', 89: 'female', 90: 'male', 91: 'female', 92: 'female', 93: 'male', 94: 'female', 95: 'male', 96: 'male', 97: 'female', 98: 'female', 99: 'male', 100: 'male', 101: 'female', 102: 'female', 103: 'male', 104: 'female', 105: 'male', 106: 'male', 107: 'female', 108: 'female', 109: 'male', 110: 'female', 111: 'male', 112: 'female', 113: 'male', 114: 'male', 115: 'female', 116: 'female', 117: 'male', 118: 'female', 119: 'male', 120: 'female', 121: 'male', 122: 'male', 123: 'female', 124: 'male', 125: 'female', 126: 'female', 127: 'male', 128: 'female', 129: 'male', 130: 'male', 131: 'female', 132: 'male', 133: 'female', 134: 'female', 135: 'male', 136: 'male', 137: 'female', 138: 'female', 139: 'male', 140: 'male', 141: 'female', 142: 'female', 143: 'male', 144: 'male', 145: 'female', 146: 'male', 147: 'female', 148: 'male', 149: 'female', 150: 'male', 151: 'female', 152: 'male', 153: 'female', 154: 'male', 155: 'female', 156: 'female', 157: 'male', 158: 'female', 159: 'male', 160: 'female', 161: 'male', 162: 'female', 163: 'male', 164: 'male', 165: 'female', 166: 'male', 167: 'female', 168: 'male', 169: 'female', 170: 'male', 171: 'female', 172: 'female', 173: 'male', 174: 'male', 175: 'female', 176: 'male', 177: 'female', 178: 'male', 179: 'female', 180: 'female', 181: 'male', 182: 'male', 183: 'female', 184: 'male', 185: 'female', 186: 'female', 187: 'male', 188: 'female', 189: 'male', 190: 'male', 191: 'female', 192: 'female', 193: 'male', 194: 'male', 195: 'female', 196: 'female', 197: 'male', 198: 'female', 199: 'male', 200: 'male', 201: 'female', 202: 'male', 203: 'female', 204: 'female', 205: 'male'}, 'foo': {0: 45, 1: 80, 2: 2, 3: 38, 4: 87, 5: 23, 6: 95, 7: 92, 8: 8, 9: 18, 10: 99, 11: 67, 12: 66, 13: 24, 14: 69, 15: 33, 16: 68, 17: 65, 18: 9, 19: 21, 20: 6, 21: 57, 22: 49, 23: 37, 24: 66, 25: 50, 26: 3, 27: 21, 28: 58, 29: 30, 30: 48, 31: 55, 32: 17, 33: 90, 34: 45, 35: 36, 36: 3, 37: 55, 38: 70, 39: 62, 40: 48, 41: 60, 42: 82, 43: 90, 44: 64, 45: 23, 46: 43, 47: 33, 48: 31, 49: 53, 50: 33, 51: 66, 52: 14, 53: 56, 54: 89, 55: 62, 56: 8, 57: 18, 58: 6, 59: 64, 60: 26, 61: 25, 62: 53, 63: 64, 64: 93, 65: 4, 66: 86, 67: 34, 68: 38, 69: 73, 70: 14, 71: 94, 72: 77, 73: 27, 74: 22, 75: 34, 76: 5, 77: 54, 78: 79, 79: 77, 80: 65, 81: 43, 82: 18, 83: 99, 84: 56, 85: 9, 86: 46, 87: 38, 88: 56, 89: 50, 90: 30, 91: 63, 92: 83, 93: 73, 94: 43, 95: 45, 96: 62, 97: 92, 98: 39, 99: 49, 100: 29, 101: 79, 102: 41, 103: 48, 104: 99, 105: 10, 106: 54, 107: 37, 108: 92, 109: 58, 110: 84, 111: 44, 112: 65, 113: 93, 114: 57, 115: 86, 116: 31, 117: 16, 118: 10, 119: 78, 120: 18, 121: 40, 122: 83, 123: 63, 124: 8, 125: 81, 126: 61, 127: 87, 128: 97, 129: 96, 130: 81, 131: 57, 132: 12, 133: 35, 134: 74, 135: 64, 136: 99, 137: 12, 138: 49, 139: 67, 140: 48, 141: 28, 142: 15, 143: 58, 144: 18, 145: 53, 146: 89, 147: 75, 148: 12, 149: 70, 150: 1, 151: 68, 152: 93, 153: 14, 154: 17, 155: 33, 156: 8, 157: 69, 158: 32, 159: 79, 160: 49, 161: 66, 162: 94, 163: 4, 164: 81, 165: 30, 166: 81, 167: 55, 168: 63, 169: 59, 170: 87, 171: 14, 172: 6, 173: 82, 174: 9, 175: 97, 176: 32, 177: 41, 178: 81, 179: 82, 180: 39, 181: 12, 182: 31, 183: 89, 184: 68, 185: 39, 186: 39, 187: 54, 188: 60, 189: 19, 190: 67, 191: 51, 192: 91, 193: 15, 194: 19, 195: 31, 196: 73, 197: 93, 198: 33, 199: 71, 200: 26, 201: 50, 202: 20, 203: 6, 204: 9, 205: 65}, 'bar': {0: 93, 1: 24, 2: 23, 3: 21, 4: 64, 5: 62, 6: 93, 7: 34, 8: 55, 9: 47, 10: 79, 11: 20, 12: 45, 13: 58, 14: 23, 15: 31, 16: 60, 17: 8, 18: 10, 19: 85, 20: 85, 21: 2, 22: 60, 23: 54, 24: 3, 25: 99, 26: 94, 27: 6, 28: 88, 29: 4, 30: 14, 31: 24, 32: 36, 33: 29, 34: 82, 35: 30, 36: 94, 37: 23, 38: 18, 39: 91, 40: 23, 41: 61, 42: 14, 43: 68, 44: 25, 45: 86, 46: 6, 47: 82, 48: 43, 49: 73, 50: 73, 51: 70, 52: 3, 53: 44, 54: 76, 55: 97, 56: 73, 57: 32, 58: 46, 59: 74, 60: 48, 61: 21, 62: 70, 63: 62, 64: 92, 65: 90, 66: 10, 67: 85, 68: 32, 69: 75, 70: 50, 71: 44, 72: 27, 73: 89, 74: 47, 75: 52, 76: 42, 77: 85, 78: 6, 79: 83, 80: 44, 81: 50, 82: 5, 83: 59, 84: 95, 85: 16, 86: 59, 87: 72, 88: 87, 89: 88, 90: 23, 91: 40, 92: 32, 93: 66, 94: 51, 95: 46, 96: 11, 97: 36, 98: 47, 99: 68, 100: 65, 101: 27, 102: 19, 103: 44, 104: 91, 105: 68, 106: 79, 107: 31, 108: 29, 109: 64, 110: 43, 111: 62, 112: 8, 113: 70, 114: 22, 115: 17, 116: 33, 117: 52, 118: 22, 119: 2, 120: 23, 121: 32, 122: 71, 123: 74, 124: 30, 125: 54, 126: 37, 127: 1, 128: 18, 129: 49, 130: 89, 131: 37, 132: 20, 133: 96, 134: 99, 135: 47, 136: 24, 137: 72, 138: 78, 139: 66, 140: 48, 141: 92, 142: 73, 143: 70, 144: 2, 145: 86, 146: 17, 147: 69, 148: 33, 149: 54, 150: 47, 151: 99, 152: 96, 153: 58, 154: 71, 155: 79, 156: 5, 157: 27, 158: 36, 159: 10, 160: 82, 161: 96, 162: 9, 163: 9, 164: 40, 165: 7, 166: 23, 167: 3, 168: 95, 169: 80, 170: 32, 171: 44, 172: 55, 173: 96, 174: 28, 175: 8, 176: 53, 177: 88, 178: 52, 179: 48, 180: 5, 181: 59, 182: 28, 183: 72, 184: 83, 185: 20, 186: 56, 187: 84, 188: 70, 189: 66, 190: 87, 191: 87, 192: 74, 193: 18, 194: 51, 195: 92, 196: 26, 197: 20, 198: 83, 199: 9, 200: 66, 201: 45, 202: 7, 203: 26, 204: 99, 205: 42}})
df['baz'] = np.random.randint(low=1, high=100, size=len(df))
df['dt'] = pd.to_datetime(df['dt'])
df['day_of_week'] = df['dt'].dt.dayofweek
df['week']=df.dt.dt.week
df['weekday'] = df.dt.dt.strftime('%a')
display(df.head())


for r in ['foo', 'bar', 'baz']:
    g = sns.catplot(x="week", y=r, hue="gender", col='weekday', data=df, height=4)#, ax=cax)
    g.set_axis_labels("calendar week")

    plt.show()

这个片段显示了单独的图。但我宁愿将它们组合成一个图形:

f, axs = plt.subplots(3, 1, figsize=(20, 20), sharex=True)
for i,r in enumerate(['foo', 'bar', 'baz']):
    g = sns.catplot(x="week", y=r, hue="gender", col='weekday', data=df, height=4, ax=axs[i])
    g.set_axis_labels("calendar week")
plt.show()

但这失败了:

catplot is a figure-level function and does not accept target axes. You may wish to try stripplot

另外,我想知道如何增加字体大小:

  • y轴
  • x 轴
  • 传奇

因为默认的 matplotlib 方法似乎不适用于 FacetGrid

编辑

但是,我需要设置sharey=False. 但我想分享每一行的 y,而不是所有行。

4

0 回答 0