I have made some boxplots, similar to this:
Here is the code:
plt.figure(figsize = (16, 8)) bp4 = plt.boxplot([X_e[X_e.index.month == m] for m in range(1, 13)], labels = months_names, vert = True) plt.setp(bp4["medians"], color = "red") plt.setp(bp4["boxes"], color = "blue") plt.setp(bp4["whiskers"], color = "blue", linestyle = "--") plt.setp(bp4["fliers"], color = "black", marker = "+") plt.xlabel("Month") plt.ylabel("Temperature (ºC)") plt.title("Month-wise Boxplots for the Extreme Maximum Temperatures Series from 1980-12-31 to 2019-12-31") plt.show()
I want to fill the boxplot colors in a continuous scale like a heatmap (for example from 25 to 40; blue to red). Any idea how to do that? Something like this (but in vertical) with a known scale that I can use in temperature boxplots from other areas:
Thanks in advance!
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Since you didn’t provide data, I’m going to use my own:
import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import Normalize import matplotlib.cm as cm from matplotlib.patches import PathPatch data_1 = np.random.normal(100, 10, 200) data_2 = np.random.normal(90, 20, 200) data_3 = np.random.normal(80, 30, 200) data_4 = np.random.normal(70, 40, 200) data = [data_1, data_2, data_3, data_4] values = [t.mean() for t in data] # create a normalizer norm = Normalize(vmin=min(values), vmax=max(values)) # normalize values norm_values = norm(values) # choose a colormap cmap = cm.magma # create colors colors = cmap(norm_values) # map values to a colorbar mappable = cm.ScalarMappable(norm=norm, cmap=cmap) mappable.set_array(colors) fig1, ax1 = plt.subplots() ax1.set_title('Basic Plot') ba = ax1.boxplot(data, patch_artist=True) patches = ba["boxes"] for p, c in zip(patches, colors): p.set_facecolor(c) cb = fig1.colorbar(mappable) cb.set_label("Mean")
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0