2013-07-30 55 views
5

Tôi đang cố gắng tạo một đường đồng mức với các mức xác định và chỉ tiêu nhật ký. Dưới đây là một ví dụ:matplotlib đường đồng mức với lognorm - mức độ màu sắc

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.colors import LogNorm 
delta = 0.025 

x = y = np.arange(0, 3.01, delta) 
X, Y = np.meshgrid(x, y) 
Z1 = plt.mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) 
Z2 = plt.mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1) 
Z = 10 * (Z1* Z2) 

fig=plt.figure() 
ax1 = fig.add_subplot(111) 
lvls = np.logspace(-4,0,20) 
CF = ax1.contourf(X,Y,Z, 
     norm = LogNorm(), 
     levels = lvls 
     ) 
CS = ax1.contour(X,Y,Z, 
     norm = LogNorm(), 
     colors = 'k', 
     levels = lvls 
     ) 
cbar = plt.colorbar(CF, ticks=lvls, format='%.4f') 
plt.show() 

enter image description here Câu hỏi của tôi là:
Mức nên được viết bằng định dạng: '1x10^-4', '1.6x10^-4', ... Làm thế nào để tôi làm điều này, mà không chỉ định từng cấp theo cách thủ công?

Tôi đang sử dụng python 2.7.3 với matplotlib 1.1.1 trên Windows 7.

+0

Thử tìm [tại đây] (http://stackoverflow.com/questions/5748076/python-matplotlib-contour-plot-logarithmic-color-scale) hoặc [tại đây] (http: //matplotlib.1069221.n5. nabble.com/logarithmic-scale-of-colorbar-with-ticks-and-custom-labels-td21663.html). – wflynny

+0

tùy thuộc vào cách bạn muốn các cấp được gắn nhãn, kiểm tra [câu trả lời này] (http://stackoverflow.com/questions/16529038/matplotlib-tick-axis-notation-with-superscript/16530841#16530841) – Schorsch

+0

Cảm ơn câu trả lời. Điều đó sẽ giải quyết Câu hỏi 1. Bạn cũng có ý tưởng cho câu hỏi 2 không? – user2145054

Trả lời

7

Từ here Tôi tìm thấy một cách tiếp cận mà dường như để phù hợp với câu hỏi của bạn:

from matplotlib.ticker import LogFormatter 
l_f = LogFormatter(10, labelOnlyBase=False) 
cbar = plt.colorbar(CF, ticks=lvls, format=l_f) 

mà sẽ cung cấp:

enter image description here

lưu ý rằng khoảng cách giữa các dấu tích thực sự ở quy mô log ...

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