I’m currently running with a little bit of trouble with regards to setting a range of colors for my errors bars. Apparently, it looks like there are two error bars imposed to one another. One is color Orange while the other is Red. For reference, I followed the steps from this post: Setting Different error bar colors in bar plot in matplotlib and tweaked to fit in. Is there a way to resolve the small issue?
I’ll also include the .csv file for usage. At the moment, the code runs like this:
import matplotlib.pyplot as plt import numpy as np import pandas as pd from scipy.stats import linregress df = pd.read_csv('Regression.csv') df.head() A = df['Period'] #Period in Days B = df['Luminosity'] #Luminosity is already Logarithmic prior to calculation colors = ['red', 'orange', 'forestgreen', 'teal', 'navy', 'darkorchid'] #range of colors #Luminosity Uncertainties ylower_error = df['-dY lum'] #lower limit yupper_error = df['+dY lum'] #upper limit yasymmetric_error = [ylower_error, yupper_error] #Regression space slope, intercept, r_value, p_value, std_err = linregress(np.log10(A+1), np.array(B)) xfid = np.linspace(2,3) # This is just a set of x to plot the straight line #Plotting the overall data fig, ax = plt.subplots(figsize=(12, 10)) ax.scatter(np.log10(A), np.array(B), marker='*', s=300, color=colors) ax.plot(xfid, xfid*slope+intercept, '-.', c='royalblue', linewidth=3, zorder=0) ax.set_xlim([2.46, 2.77]) #X-Limits ax.set_ylim([4.35, 5.45]) #Y-Limits #Setting the range of colors for the error bar. This one came from the reference post. for yerr, color in zip(yasymmetric_error, colors): ax.errorbar(np.log10(A), np.array(B), yerr, lw=2, capsize=3, capthick=2, ls='none', ecolor=color) plt.rcParams['axes.linewidth'] = 4 plt.tight_layout()
The loop should enumerate the components individually. The idea is that each error bar is plotted separately, so in each iteration you plot a single combination of
for x, y, lower, upper, color in zip(np.log10(A), np.array(B), ylower_error, yupper_error, colors): ax.errorbar(x, y, yerr=np.array([[lower], [upper]]), lw=2, capsize=3, capthick=2, ls='none', ecolor=color)