tôi đã cố gắng cả các thiết lập được trên các ý kiến khác, cụ thể là
cbar.solids.set_rasterized(True)
cbar.solids.set_edgecolor("face")
và tiếc là không làm việc cho tôi.
Vì vậy, tôi đã thử một cách tiếp cận hoàn toàn khác, đó là một hack lớn, nhưng ít nhất là hoàn thành công việc. Khi bạn vượt qua alpha
đến imshow
, nó sẽ đặt giá trị alpha sẽ được sử dụng để kết hợp với các hình ảnh khác. Do các lý do về quyền lực cao hơn (như @mfra đã đề cập), điều này tạo ra các đường màu trắng mà chúng ta coi thường. Rõ ràng, chìa khóa là để không chuyển giá trị alpha đến imshow
. Tuy nhiên, chúng tôi vẫn cần bằng cách nào đó tạo ra thanh màu.
Do đó, cách giải quyết khác là chúng tôi có thể tự pha trộn alpha trước khi đưa colormaps vào imshow
. Như một ví dụ, chúng ta hãy sử dụng winter
colormap:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
xx, yy = np.meshgrid(np.linspace(-1, 1, 100), np.linspace(-1, 1, 100))
zz = xx**2 + yy**2
my_cmap_rgb = plt.get_cmap('winter')(np.arange(256))
alpha = 0.5
for i in range(3): # Do not include the last column!
my_cmap_rgb[:,i] = (1 - alpha) + alpha*my_cmap_rgb[:,i]
my_cmap = mpl.colors.ListedColormap(my_cmap_rgb, name='my_cmap')
Ở đây tôi tạo ra một bản đồ màu mới, my_cmap_rgb
, dựa trên winter
và sau đó chỉnh sửa các kênh phi-alpha (0, 1 và 2) để làm alpha pha trộn bản thân mình . Sau đó tôi có thể sử dụng bản đồ màu mới này để vẽ hình của tôi.
f, ax = plt.subplots()
cim = ax.imshow(zz, cmap=my_cmap)
cbar = plt.colorbar(cim)
ax.set_title("No lines and no transparency")
Bây giờ so sánh nó với hình ảnh mà bạn muốn có được mà không cần thủ thuật này:
f, ax = plt.subplots()
cim = ax.imshow(zz, cmap='winter', alpha=0.5)
cbar = plt.colorbar(cim)
ax.set_title("Lines and transparency")

Rõ ràng vấn đề được giải quyết nếu bạn không cần minh bạch. Mặt khác, nếu bạn yêu cầu minh bạch, có một cách giải quyết khác. Trước tiên, bạn phải vẽ một hình ảnh mà không có độ trong suốt để có được thanh màu sắc, và sau đó vẽ một ô với độ trong suốt, nhưng thanh màu sẽ không được sử dụng.
f, ax = plt.subplots()
cim = ax.imshow(zz, cmap=my_cmap)
cbar = plt.colorbar(cim)
plt.cla() # Clears axis
ax.plot(50,50, 'ko')
ax.imshow(zz, cmap='winter', alpha=0.5)
ax.set_title("No lines and transparency")
Điều này dẫn đến hình ảnh có vạch màu không có đường nhưng vẫn giữ được độ trong suốt. Trong khi nó vẫn là một hack lớn, ít nhất chúng tôi không phải đưa lên với những dòng này nữa!

Bạn đã cố lưu hình bằng các định dạng khác nhau chưa? Nếu có, bạn có luôn gặp vấn đề này không? –
Tôi chỉ thấy điều này là kết quả của alpha, bạn có thực sự chắc chắn nó giống với alpha = 1.0 không? –
Có, nó xảy ra với png, nhưng tôi đã không khắc phục sự cố này. Có, tôi đã thấy nó cho alpha = 1.0 với SVG. – jseabold