Bokeh - Trục

Trong chương này, chúng ta sẽ thảo luận về các loại trục khác nhau.

Sr.No Axes Sự miêu tả
1 Trục Categorical Biểu đồ bokeh hiển thị dữ liệu số dọc theo cả hai trục x và y. Để sử dụng dữ liệu phân loại dọc theo một trong hai trục, chúng ta cần chỉ định FactorRange để chỉ định kích thước phân loại cho một trong số chúng.
2 Trục quy mô nhật ký Nếu tồn tại mối quan hệ luật lũy thừa giữa chuỗi dữ liệu x và y, thì nên sử dụng thang log trên cả hai trục.
3 Trục đôi Có thể cần thiết để hiển thị nhiều trục đại diện cho các phạm vi khác nhau trên một hình vẽ đơn lẻ. Đối tượng hình có thể được cấu hình như vậy bằng cách xác địnhextra_x_rangeextra_y_range tính chất

Trục Categorical

Trong các ví dụ cho đến nay, biểu đồ Bokeh hiển thị dữ liệu số dọc theo cả hai trục x và y. Để sử dụng dữ liệu phân loại dọc theo một trong hai trục, chúng ta cần chỉ định FactorRange để chỉ định kích thước phân loại cho một trong số chúng. Ví dụ, để sử dụng các chuỗi trong danh sách đã cho cho trục x -

langs = ['C', 'C++', 'Java', 'Python', 'PHP']
fig = figure(x_range = langs, plot_width = 300, plot_height = 300)

Thí dụ

Với ví dụ sau, một biểu đồ thanh đơn giản được hiển thị cho biết số lượng sinh viên đăng ký cho các khóa học khác nhau được cung cấp.

from bokeh.plotting import figure, output_file, show
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
fig = figure(x_range = langs, plot_width = 300, plot_height = 300)
fig.vbar(x = langs, top = students, width = 0.5)
show(fig)

Đầu ra

Để hiển thị từng thanh bằng màu khác nhau, hãy đặt thuộc tính màu của hàm vbar () thành danh sách các giá trị màu.

cols = ['red','green','orange','navy', 'cyan']
fig.vbar(x = langs, top = students, color = cols,width=0.5)

Đầu ra

Để hiển thị một thanh xếp chồng theo chiều dọc (hoặc ngang) bằng cách sử dụng hàm vbar_stack () hoặc hbar_stack (), hãy đặt thuộc tính ngăn xếp thành danh sách các trường để xếp liên tiếp và thuộc tính nguồn thành một đối tượng dict chứa các giá trị tương ứng với từng trường.

Trong ví dụ sau, doanh số bán hàng là một từ điển hiển thị số liệu bán hàng của ba sản phẩm trong ba tháng.

from bokeh.plotting import figure, output_file, show
products = ['computer','mobile','printer']
months = ['Jan','Feb','Mar']
sales = {'products':products,
   'Jan':[10,40,5],
   'Feb':[8,45,10],
   'Mar':[25,60,22]}
cols = ['red','green','blue']#,'navy', 'cyan']
fig = figure(x_range = products, plot_width = 300, plot_height = 300)
fig.vbar_stack(months, x = 'products', source = sales, color = cols,width = 0.5)
show(fig)

Đầu ra

Một biểu đồ thanh được nhóm lại có được bằng cách chỉ định sự dịch chuyển trực quan cho các thanh với sự trợ giúp của hàm dodge () trong bokeh.transform mô-đun.

Các dodge() functiongiới thiệu độ lệch tương đối cho mỗi ô thanh, do đó đạt được ấn tượng trực quan về nhóm. Trong ví dụ sau,vbar() glyph được phân tách bằng khoảng chênh lệch 0,25 cho mỗi nhóm thanh trong một tháng cụ thể.

from bokeh.plotting import figure, output_file, show
from bokeh.transform import dodge
products = ['computer','mobile','printer']
months = ['Jan','Feb','Mar']
sales = {'products':products,
   'Jan':[10,40,5],
   'Feb':[8,45,10],
   'Mar':[25,60,22]}
fig = figure(x_range = products, plot_width = 300, plot_height = 300)
fig.vbar(x = dodge('products', -0.25, range = fig.x_range), top = 'Jan',
   width = 0.2,source = sales, color = "red")
fig.vbar(x = dodge('products', 0.0, range = fig.x_range), top = 'Feb',
   width = 0.2, source = sales,color = "green")
fig.vbar(x = dodge('products', 0.25, range = fig.x_range), top = 'Mar',
   width = 0.2,source = sales,color = "blue")
show(fig)

Đầu ra

Trục quy mô nhật ký

Khi các giá trị trên một trong các trục của một biểu đồ tăng theo cấp số nhân với các giá trị tăng tuyến tính của một biểu đồ khác, thường cần hiển thị dữ liệu trên trục cũ trên thang log. Ví dụ, nếu tồn tại mối quan hệ luật lũy thừa giữa chuỗi dữ liệu x và y, thì nên sử dụng thang log trên cả hai trục.

Hàm figure () của Bokeh.plotting API chấp nhận x_axis_type và y_axis_type làm đối số có thể được chỉ định làm trục nhật ký bằng cách chuyển "log" cho giá trị của một trong các tham số này.

Hình đầu tiên cho thấy biểu đồ giữa x và 10x trên thang tuyến tính. Trong hình thứ hai, y_axis_type được đặt thành 'log'

from bokeh.plotting import figure, output_file, show
x = [0.1, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0]
y = [10**i for i in x]
fig = figure(title = 'Linear scale example',plot_width = 400, plot_height = 400)
fig.line(x, y, line_width = 2)
show(fig)

Đầu ra

Bây giờ thay đổi hàm figure () để cấu hình y_axis_type = 'log'

fig = figure(title = 'Linear scale example',plot_width = 400, plot_height = 400, y_axis_type = "log")

Đầu ra

Trục đôi

Trong một số tình huống nhất định, có thể cần hiển thị nhiều trục đại diện cho các phạm vi khác nhau trên một hình vẽ đơn lẻ. Đối tượng hình có thể được cấu hình như vậy bằng cách xác địnhextra_x_rangeextra_y_rangetính chất. Trong khi thêm glyph mới vào hình, các phạm vi được đặt tên này được sử dụng.

Chúng tôi cố gắng hiển thị một đường cong hình sin và một đường thẳng trong cùng một biểu đồ. Cả hai glyph đều có trục y với các phạm vi khác nhau. Chuỗi dữ liệu x và y cho đường cong và đường sin thu được bằng cách sau:

from numpy import pi, arange, sin, linspace
x = arange(-2*pi, 2*pi, 0.1)
y = sin(x)
y2 = linspace(0, 100, len(y))

Ở đây, biểu đồ giữa x và y đại diện cho quan hệ sin và biểu đồ giữa x và y2 là một đường thẳng. Đối tượng Hình được xác định với y_range rõ ràng và một glyph đường biểu diễn đường cong sin được thêm vào như sau:

fig = figure(title = 'Twin Axis Example', y_range = (-1.1, 1.1))
fig.line(x, y, color = "red")

Chúng tôi cần thêm một phạm vi y. Nó được định nghĩa là -

fig.extra_y_ranges = {"y2": Range1d(start = 0, end = 100)}

Để thêm trục y bổ sung ở phía bên phải, hãy sử dụng phương thức add_layout (). Thêm một glyph dòng mới đại diện cho x và y2 vào hình.

fig.add_layout(LinearAxis(y_range_name = "y2"), 'right')
fig.line(x, y2, color = "blue", y_range_name = "y2")

Điều này sẽ dẫn đến một âm mưu có trục y đôi. Hoàn thành mã và kết quả như sau:

from numpy import pi, arange, sin, linspace
x = arange(-2*pi, 2*pi, 0.1)
y = sin(x)
y2 = linspace(0, 100, len(y))
from bokeh.plotting import output_file, figure, show
from bokeh.models import LinearAxis, Range1d
fig = figure(title='Twin Axis Example', y_range = (-1.1, 1.1))
fig.line(x, y, color = "red")
fig.extra_y_ranges = {"y2": Range1d(start = 0, end = 100)}
fig.add_layout(LinearAxis(y_range_name = "y2"), 'right')
fig.line(x, y2, color = "blue", y_range_name = "y2")
show(fig)

Đầu ra