Reputation: 21
this is my first time using this wonderful website. and I've already trapped in this question for a long time. I hope there is someone's help. Question Details: I can't Draw multiple curves on one picture via matplotlib. I've tried using scatter rather than plot, but it still didn't work. until now, running this program can only show one curve which is green made from last plot statement. and I debug for many times, but i gotta nothing improved.my desired expectation is to have all six curves shown in one picture with corresponding colors, appreciate your help.Here is my code:
from scipy.special import comb
import matplotlib.pyplot as plt
# setting paraments
N = 100000
x = range(501)
a = range(5,11)
# define a function to traverse all x and find M
def get_P_A(a_):
M_results = []
for x_ in x:
a1 = 1
sum_P = 0.0
while (a1 <= a_):
P_A = comb(x_, a1) * comb(N - x_, 5 - a1) / comb(N, 5)
M = 1 * (1 - P_A) * N / a_ + (a_ + 1) * P_A * N / a_
sum_P += M
a1 += 1
M_results.append(sum_P)
return M_results
# traverse all a and store the result in M_total_results
M_total_results = [get_P_A(a_) for a_ in a]
# visualize calculation results
plt.plot(x,M_total_results[0],color='red',linewidth=3,linestyle='--') #When M=5, use the red line to show the result
plt.plot(x,M_total_results[1],color='blue',linewidth=3,linestyle='--') #When M=6, use the blue line to show the result
plt.plot(x,M_total_results[2],color='yellow',linewidth=3,linestyle='--') #When M=7, use the yellow line to show the result
plt.plot(x,M_total_results[3],color='cyan',linewidth=3,linestyle='--') #When M=8, use the cyan line to show the result
plt.plot(x,M_total_results[4],color='black',linewidth=3,linestyle='--') #When M=9, use the black line to show the result
plt.plot(x,M_total_results[5],color='green',linewidth=3,linestyle='--') #When M=10, use the green line to show the result
# add corresponding labels to the chart
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.title("Distribution of the number of mixed samples under different positive samples",size=24)
plt.xlabel("number of positive samples/个",size=14)
plt.ylabel("M",size=14)
plt.tick_params(axis='both',size=14)
plt.grid(alpha=0.8,linestyle=':')
plt.show()
Upvotes: 0
Views: 194
Reputation: 66
Your plotting code is fine. If you print the rows of M_total_results, you will find the curves are overlapping. You can also check it by adjusting the alpha of the bottom curves.
Upvotes: 1