2015-02-08 16 views
12

Tôi đang vẽ biểu đồ và tôi có ba tập dữ liệu mà tôi muốn vẽ cùng nhau, mỗi tập hợp có màu sắc và kiểu chữ khác nhau (dấu gạch ngang, chấm chấm, v.v.). Tôi cũng đưa ra một số minh bạch, để xem các thanh chồng chéo.Matplotlib: vẽ biểu đồ trong suốt với cạnh không trong suốt

Vấn đề là tôi muốn cạnh của mỗi thanh không trở nên trong suốt như phần bên trong. Dưới đây là một ví dụ:

import matplotlib.pyplot as plt 
import numpy as np 

x = np.random.random(20) 
y =np.random.random(20) 
z= np.random.random(20) 

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.hist(x, bins=np.arange(0, 1, 0.1), ls='dashed', alpha = 0.5, lw=3, color= 'b') 
ax.hist(y, bins=np.arange(0, 1, 0.1), ls='dotted', alpha = 0.5, lw=3, color= 'r') 
ax.hist(z, bins=np.arange(0, 1, 0.1), alpha = 0.5, lw=3, color= 'k') 
ax.set_xlim(-0.5, 1.5) 
ax.set_ylim(0, 7) 
plt.show() 

enter image description here

Trả lời

13

plt.hist chấp nhận đối số từ khóa bổ sung được thông qua với các nhà xây dựng cho matplotlib.patches.Patch. Đặc biệt, bạn có thể vượt qua đối số fc= cho phép bạn đặt mặt nạ bản vá bằng cách sử dụng bộ tảo (R, G, B, A) khi bạn tạo biểu đồ. Thay đổi giá trị alpha của facecolor không ảnh hưởng đến tính minh bạch của các cạnh:

ax.hist(x, bins=np.arange(0, 1, 0.1), ls='dashed', lw=3, fc=(0, 0, 1, 0.5)) 
ax.hist(y, bins=np.arange(0, 1, 0.1), ls='dotted', lw=3, fc=(1, 0, 0, 0.5)) 
ax.hist(z, bins=np.arange(0, 1, 0.1), lw=3, fc=(0, 0, 0, 0.5)) 

enter image description here

2

Tôi nghĩ rằng có lẽ là giải pháp dumbest là dễ nhất và tốt nhất? Chỉ cần thay thế các biểu đồ, không có màu bên trong và không có alpha. Điều đó chỉ nên thay thế các dòng biểu đồ.

Bên cạnh đó bạn có thể muốn loại bỏ nguy cơ có dòng/dấu gạch ngang/chấm không chồng chéo lên nhau bằng cách loại bỏ chúng hoàn toàn từ cốt truyện histogram đầu tiên

import matplotlib as mpl 
import matplotlib.pyplot as plt 
import numpy as np 

x = np.random.random(20) 
y = np.random.random(20) 
z = np.random.random(20) 

fig = plt.figure() 
ax = fig.add_subplot(111) 

ax.hist(x, bins=np.arange(0, 1, 0.1), edgecolor='None', alpha = 0.5, color= 'b') 
ax.hist(y, bins=np.arange(0, 1, 0.1), edgecolor='None', alpha = 0.5, color= 'r') 
ax.hist(z, bins=np.arange(0, 1, 0.1), edgecolor="None", alpha = 0.5, color= 'k') 


ax.hist(x, bins=np.arange(0, 1, 0.1), ls='dashed', lw=3, facecolor="None") 
ax.hist(y, bins=np.arange(0, 1, 0.1), ls='dotted', lw=3, facecolor="None") 
ax.hist(z, bins=np.arange(0, 1, 0.1), lw=3, facecolor="None") 

plt.show() 

mà không có đơn đặt hàng thứ hai đồ thị sẽ giống như con số của bạn mà không bất kỳ biên giới nào. Với các đường viền lệnh biểu đồ dưới cùng 3 được thêm vào để tạo ra hình ảnh dưới đây. Hoạt động trên Python3.4 Win7

[cắt vì hình như tôi không có đủ đại diện để gửi hình ảnh]

Các vấn đề liên quan