Thursday, 16 November 2023

Exclude subplots without any data in relplot and reorder the rest

Related to this question: Use relplot to plot a pandas dataframe leading to error

Data for reproducible example is here:

  {'Index': {23168: 'TN10p', 23180: 'CSU', 23181: 'PRCPTOT', 23183: 'SDII', 23184: 'CWD', 23193: 'R99p', 23194: 'R99pTOT', 23197: 'TX', 23211: 'MIN', 23221: 'TN10p', 23233: 'CSU', 23234: 'PRCPTOT', 23236: 'SDII', 23237: 'CWD', 23246: 'R99p', 23247: 'R99pTOT', 23250: 'TX', 23264: 'MIN', 23274: 'TN10p', 23286: 'CSU', 23287: 'PRCPTOT', 23289: 'SDII', 23290: 'CWD', 23299: 'R99p', 23300: 'R99pTOT', 23303: 'TX', 23317: 'MIN', 23327: 'TN10p', 23339: 'CSU', 23340: 'PRCPTOT', 23342: 'SDII', 23343: 'CWD', 23352: 'R99p', 23353: 'R99pTOT', 23356: 'TX', 23370: 'MIN', 23380: 'TN10p', 23392: 'CSU', 23393: 'PRCPTOT', 23395: 'SDII', 23396: 'CWD', 23405: 'R99p', 23406: 'R99pTOT', 23409: 'TX', 23423: 'MIN', 23433: 'TN10p', 23445: 'CSU', 23446: 'PRCPTOT', 23448: 'SDII', 23449: 'CWD', 23458: 'R99p', 23459: 'R99pTOT', 23462: 'TX', 23476: 'MIN', 23486: 'TN10p', 23498: 'CSU', 23499: 'PRCPTOT', 23501: 'SDII', 23502: 'CWD', 23511: 'R99p', 23512: 'R99pTOT', 23515: 'TX', 23529: 'MIN', 23539: 'TN10p', 23551: 'CSU', 23552: 'PRCPTOT', 23554: 'SDII', 23555: 'CWD', 23564: 'R99p', 23565: 'R99pTOT', 23568: 'TX', 23582: 'MIN', 23592: 'TN10p', 23604: 'CSU', 23605: 'PRCPTOT', 23607: 'SDII', 23608: 'CWD', 23617: 'R99p', 23618: 'R99pTOT', 23621: 'TX', 23635: 'MIN', 23645: 'TN10p', 23657: 'CSU', 23658: 'PRCPTOT', 23660: 'SDII', 23661: 'CWD', 23670: 'R99p', 23671: 'R99pTOT', 23674: 'TX', 23688: 'MIN', 23698: 'TN10p', 23710: 'CSU', 23711: 'PRCPTOT', 23713: 'SDII', 23714: 'CWD', 23723: 'R99p', 23724: 'R99pTOT', 23727: 'TX', 23741: 'MIN', 23751: 'TN10p', 23763: 'CSU', 23764: 'PRCPTOT', 23766: 'SDII', 23767: 'CWD', 23776: 'R99p', 23777: 'R99pTOT', 23780: 'TX', 23794: 'MIN', 23804: 'TN10p', 23816: 'CSU', 23817: 'PRCPTOT', 23819: 'SDII', 23820: 'CWD', 23829: 'R99p', 23830: 'R99pTOT', 23833: 'TX', 23847: 'MIN', 23857: 'TN10p', 23869: 'CSU', 23870: 'PRCPTOT', 23872: 'SDII', 23873: 'CWD', 23882: 'R99p', 23883: 'R99pTOT', 23886: 'TX', 23900: 'MIN', 23910: 'TN10p', 23922: 'CSU', 23923: 'PRCPTOT', 23925: 'SDII', 23926: 'CWD', 23935: 'R99p', 23936: 'R99pTOT', 23939: 'TX', 23953: 'MIN', 23963: 'TN10p', 23975: 'CSU', 23976: 'PRCPTOT', 23978: 'SDII', 23979: 'CWD', 23988: 'R99p', 23989: 'R99pTOT', 23992: 'TX', 24006: 'MIN', 24016: 'TN10p', 24028: 'CSU', 24029: 'PRCPTOT', 24031: 'SDII', 24032: 'CWD', 24041: 'R99p', 24042: 'R99pTOT', 24045: 'TX', 24059: 'MIN', 24069: 'TN10p', 24081: 'CSU', 24082: 'PRCPTOT', 24084: 'SDII', 24085: 'CWD', 24094: 'R99p', 24095: 'R99pTOT', 24098: 'TX', 24112: 'MIN', 24122: 'TN10p', 24134: 'CSU', 24135: 'PRCPTOT', 24137: 'SDII', 24138: 'CWD', 24147: 'R99p', 24148: 'R99pTOT', 24151: 'TX', 24165: 'MIN'}, 'Stage': {23168: 10, 23180: 10, 23181: 10, 23183: 10, 23184: 10, 23193: 10, 23194: 10, 23197: 10, 23211: 10, 23221: 11, 23233: 11, 23234: 11, 23236: 11, 23237: 11, 23246: 11, 23247: 11, 23250: 11, 23264: 11, 23274: 12, 23286: 12, 23287: 12, 23289: 12, 23290: 12, 23299: 12, 23300: 12, 23303: 12, 23317: 12, 23327: 13, 23339: 13, 23340: 13, 23342: 13, 23343: 13, 23352: 13, 23353: 13, 23356: 13, 23370: 13, 23380: 14, 23392: 14, 23393: 14, 23395: 14, 23396: 14, 23405: 14, 23406: 14, 23409: 14, 23423: 14, 23433: 15, 23445: 15, 23446: 15, 23448: 15, 23449: 15, 23458: 15, 23459: 15, 23462: 15, 23476: 15, 23486: 16, 23498: 16, 23499: 16, 23501: 16, 23502: 16, 23511: 16, 23512: 16, 23515: 16, 23529: 16, 23539: 17, 23551: 17, 23552: 17, 23554: 17, 23555: 17, 23564: 17, 23565: 17, 23568: 17, 23582: 17, 23592: 18, 23604: 18, 23605: 18, 23607: 18, 23608: 18, 23617: 18, 23618: 18, 23621: 18, 23635: 18, 23645: 19, 23657: 19, 23658: 19, 23660: 19, 23661: 19, 23670: 19, 23671: 19, 23674: 19, 23688: 19, 23698: 20, 23710: 20, 23711: 20, 23713: 20, 23714: 20, 23723: 20, 23724: 20, 23727: 20, 23741: 20, 23751: 21, 23763: 21, 23764: 21, 23766: 21, 23767: 21, 23776: 21, 23777: 21, 23780: 21, 23794: 21, 23804: 22, 23816: 22, 23817: 22, 23819: 22, 23820: 22, 23829: 22, 23830: 22, 23833: 22, 23847: 22, 23857: 23, 23869: 23, 23870: 23, 23872: 23, 23873: 23, 23882: 23, 23883: 23, 23886: 23, 23900: 23, 23910: 24, 23922: 24, 23923: 24, 23925: 24, 23926: 24, 23935: 24, 23936: 24, 23939: 24, 23953: 24, 23963: 25, 23975: 25, 23976: 25, 23978: 25, 23979: 25, 23988: 25, 23989: 25, 23992: 25, 24006: 25, 24016: 26, 24028: 26, 24029: 26, 24031: 26, 24032: 26, 24041: 26, 24042: 26, 24045: 26, 24059: 26, 24069: 27, 24081: 27, 24082: 27, 24084: 27, 24085: 27, 24094: 27, 24095: 27, 24098: 27, 24112: 27, 24122: 28, 24134: 28, 24135: 28, 24137: 28, 24138: 28, 24147: 28, 24148: 28, 24151: 28, 24165: 28}, 'Z-Score CEI': {23168: -0.688363146221944, 23180: 0.5773502691896258, 23181: -0.1132178081286216, 23183: -0.4278470185781525, 23184: 1.0564189237269357, 23193: -0.2085144140570746, 23194: -0.2085144140570747, 23197: 0.2094308186874662, 23211: 0.7196177629619716, 23221: 0.0, 23233: 0.2085144140570762, 23234: -1.3803992008056865, 23236: -1.3414801279616884, 23237: -0.898669162696764, 23246: -0.3015113445777637, 23247: -0.2953788838542738, 23250: 1.1753566728623484, 23264: 0.887285779752818, 23274: -0.7071067811865475, 23286: 0.2847473987257496, 23287: 0.1877402877114761, 23289: -0.14246249364941, 23290: 0.9686648999069224, 23299: -0.3015113445777636, 23300: -0.2734952011457535, 23303: 0.5888914135578924, 23317: -0.4488478006064821, 23327: -0.7745966692414834, 23339: 0.3052145041378634, 23340: 0.8197566686157259, 23342: 0.3377616284580471, 23343: 1.1832159566199232, 23352: -0.3015113445777637, 23353: -0.2952684241380082, 23356: -0.7971688059921156, 23370: 0.4479595231454734, 23380: -0.5805577953661853, 23392: 0.3015113445777642, 23393: -0.610500944190139, 23395: -0.7734588159553295, 23396: -0.5434722467562666, 23405: -0.2085144140570747, 23406: -0.2085144140570747, 23409: 0.8838570486142397, 23423: -0.7976091842744983, 23433: 2.213211486674006, 23445: 0.3779644730092272, 23446: -0.6900911175081499, 23448: -0.4856558012299846, 23449: -0.6044504143545613, 23458: -0.2085144140570746, 23459: -0.2085144140570747, 23462: 1.6498242899497324, 23476: 0.463638205246897, 23486: -0.064684622735315, 23498: 0.5488212999484522, 23499: -0.665392754456709, 23501: -1.096398502672124, 23502: 0.9387247898517332, 23511: -0.2085144140570747, 23512: -0.2085144140570748, 23515: 1.5486212537866115, 23529: 0.6776076459912243, 23539: -0.7973761651368712, 23551: 0.4773960376293314, 23552: 0.2611306759187019, 23554: -0.2450438178293888, 23555: 0.1097642599896903, 23564: -0.2085144140570746, 23565: -0.2085144140570747, 23568: 1.2468175442040146, 23582: 0.4912008775378222, 23592: -0.8071397220005339, 23604: 0.3015113445777636, 23605: -0.4051430868010012, 23607: -0.9843673918740764, 23608: 0.4231429298696365, 23617: -0.2085144140570746, 23618: -0.2182178902359924, 23621: 1.0617336112420042, 23635: 0.4221998839727844, 23645: -0.2267786838055363, 23657: 0.2847473987257496, 23658: 1.2708306299144654, 23660: 2.4058495687034616, 23661: -0.1042572070285372, 23670: 4.79583152331272, 23671: 4.79583152331272, 23674: -0.1758750648062869, 23688: 0.9614146130140746, 23698: -0.6493094697110509, 23710: 0.2847473987257496, 23711: -0.0566333001085325, 23713: 0.0970016157961683, 23714: -0.3380617018914065, 23723: -0.2085144140570746, 23724: -0.2132007163556104, 23727: 1.6462867435913509, 23741: 0.8920062635166146, 23751: -0.649519052838329, 23763: 0.2847473987257496, 23764: -0.5727902328114448, 23766: -0.385256843427376, 23767: 0.123403510468459, 23776: -0.2085144140570747, 23777: -0.2085144140570747, 23780: 0.7206954054604126, 23794: -0.0169294393471337, 23804: -0.1547646465068273, 23816: 0.3900382256192578, 23817: -0.91200685504817, 23819: -0.7643838011372592, 23820: -0.8553913029328061, 23829: -0.2085144140570746, 23830: -0.2132007163556104, 23833: 1.999517273479448, 23847: 0.2135313581345105, 23857: 0.3577708763999664, 23869: 0.2085144140570741, 23870: -0.5245759407883583, 23872: -0.3972170332271401, 23873: 0.1363988678940945, 23882: -0.2085144140570746, 23883: -0.2085144140570747, 23886: 2.180043023382912, 23900: 0.6949201395674811, 23910: -0.0345238339879863, 23922: 0.3872983346207417, 23923: -1.054383845470446, 23925: -0.7524909974608698, 23926: -0.79555728417573, 23935: -0.2085144140570747, 23936: -0.2085144140570747, 23939: 2.597515932302782, 23953: -0.0173575308522844, 23963: -0.7839294959021852, 23975: 0.5496481403962044, 23976: 0.3346732026206391, 23978: -0.1729151200242987, 23979: 0.8108848540793832, 23988: -0.2085144140570747, 23989: -0.2085144140570747, 23992: -0.1975075078549267, 24006: -0.1333012766349092, 24016: -0.7300956427599692, 24028: 0.3495310368212778, 24029: -0.9383516638143292, 24031: 0.3757624051611033, 24032: -0.9198662110078, 24041: -0.2085144140570747, 24042: -0.2085144140570747, 24045: 0.1077379509580834, 24059: -0.0391099277150297, 24069: -0.8006407690254357, 24081: 0.5226257719601375, 24082: 0.2650955994479978, 24084: -0.3323178678594628, 24085: 1.348187695720845, 24094: -0.2085144140570746, 24095: -0.2085144140570748, 24098: 0.6009413558916348, 24112: 0.455353435995126, 24122: -0.5933908290969269, 24134: 0.0, 24135: 0.1226864783178058, 24137: -0.0252747129054563, 24138: 0.8212299340934688, 24147: -0.2085144140570746, 24148: -0.2132007163556105, 24151: -0.8954835101738379, 24165: -1.1134420487718968}, 'Type': {23168: 'Cold', 23180: 'Heat', 23181: 'Rain', 23183: 'Rain', 23184: 'Rain', 23193: 'Rain', 23194: 'Rain', 23197: 'Temperature', 23211: 'VI', 23221: 'Cold', 23233: 'Heat', 23234: 'Rain', 23236: 'Rain', 23237: 'Rain', 23246: 'Rain', 23247: 'Rain', 23250: 'Temperature', 23264: 'VI', 23274: 'Cold', 23286: 'Heat', 23287: 'Rain', 23289: 'Rain', 23290: 'Rain', 23299: 'Rain', 23300: 'Rain', 23303: 'Temperature', 23317: 'VI', 23327: 'Cold', 23339: 'Heat', 23340: 'Rain', 23342: 'Rain', 23343: 'Rain', 23352: 'Rain', 23353: 'Rain', 23356: 'Temperature', 23370: 'VI', 23380: 'Cold', 23392: 'Heat', 23393: 'Rain', 23395: 'Rain', 23396: 'Rain', 23405: 'Rain', 23406: 'Rain', 23409: 'Temperature', 23423: 'VI', 23433: 'Cold', 23445: 'Heat', 23446: 'Rain', 23448: 'Rain', 23449: 'Rain', 23458: 'Rain', 23459: 'Rain', 23462: 'Temperature', 23476: 'VI', 23486: 'Cold', 23498: 'Heat', 23499: 'Rain', 23501: 'Rain', 23502: 'Rain', 23511: 'Rain', 23512: 'Rain', 23515: 'Temperature', 23529: 'VI', 23539: 'Cold', 23551: 'Heat', 23552: 'Rain', 23554: 'Rain', 23555: 'Rain', 23564: 'Rain', 23565: 'Rain', 23568: 'Temperature', 23582: 'VI', 23592: 'Cold', 23604: 'Heat', 23605: 'Rain', 23607: 'Rain', 23608: 'Rain', 23617: 'Rain', 23618: 'Rain', 23621: 'Temperature', 23635: 'VI', 23645: 'Cold', 23657: 'Heat', 23658: 'Rain', 23660: 'Rain', 23661: 'Rain', 23670: 'Rain', 23671: 'Rain', 23674: 'Temperature', 23688: 'VI', 23698: 'Cold', 23710: 'Heat', 23711: 'Rain', 23713: 'Rain', 23714: 'Rain', 23723: 'Rain', 23724: 'Rain', 23727: 'Temperature', 23741: 'VI', 23751: 'Cold', 23763: 'Heat', 23764: 'Rain', 23766: 'Rain', 23767: 'Rain', 23776: 'Rain', 23777: 'Rain', 23780: 'Temperature', 23794: 'VI', 23804: 'Cold', 23816: 'Heat', 23817: 'Rain', 23819: 'Rain', 23820: 'Rain', 23829: 'Rain', 23830: 'Rain', 23833: 'Temperature', 23847: 'VI', 23857: 'Cold', 23869: 'Heat', 23870: 'Rain', 23872: 'Rain', 23873: 'Rain', 23882: 'Rain', 23883: 'Rain', 23886: 'Temperature', 23900: 'VI', 23910: 'Cold', 23922: 'Heat', 23923: 'Rain', 23925: 'Rain', 23926: 'Rain', 23935: 'Rain', 23936: 'Rain', 23939: 'Temperature', 23953: 'VI', 23963: 'Cold', 23975: 'Heat', 23976: 'Rain', 23978: 'Rain', 23979: 'Rain', 23988: 'Rain', 23989: 'Rain', 23992: 'Temperature', 24006: 'VI', 24016: 'Cold', 24028: 'Heat', 24029: 'Rain', 24031: 'Rain', 24032: 'Rain', 24041: 'Rain', 24042: 'Rain', 24045: 'Temperature', 24059: 'VI', 24069: 'Cold', 24081: 'Heat', 24082: 'Rain', 24084: 'Rain', 24085: 'Rain', 24094: 'Rain', 24095: 'Rain', 24098: 'Temperature', 24112: 'VI', 24122: 'Cold', 24134: 'Heat', 24135: 'Rain', 24137: 'Rain', 24138: 'Rain', 24147: 'Rain', 24148: 'Rain', 24151: 'Temperature', 24165: 'VI'}}

I want to plot the data, rows should be based on the column Type, cols should be based on the column Index, the x-axis should be Z-Score CEI, and the y-axis should be based on Stage column. Currently, I am using relplot to do this:

df = df.groupby('Index').filter(lambda x: not x['Z-Score CEI'].isna().all())
df["Type"] = df["Type"].astype("category")
df["Index"] = df["Index"].astype("category")

df["Type"] = df["Type"].cat.remove_unused_categories()
df["Index"] = df["Index"].cat.remove_unused_categories()

g = sns.relplot(
    data=df,
    x='Z-Score CEI',
    y='Stage',
    col='Index',
    row='Type',
    facet_kws={'sharey': True, 'sharex': True},
    kind='line',
    legend=False,
)

for (i,j,k), data in g.facet_data():
    if data.empty:
        ax = g.facet_axis(i, j)
        ax.set_axis_off()

However, this leads to a plot where the empty plots are distorting the placement of the subplots with data. I want there to be no empty areas.

Current output looks like so: rder



from Exclude subplots without any data in relplot and reorder the rest

No comments:

Post a Comment