コンポーネント工房:Reflexライブラリ100
·
講座の概要
レイアウト
·
Box
·
Flex
·
Stack
·
Grid
·
Container
·
Section
·
Center
·
Spacer
·
Separator
·
Card
·
Inset
·
Aspect Ratio
·
Fragment
タイポグラフィ
·
Text
·
Heading
·
Link
·
Code
·
Markdown
·
Blockquote
·
Quote
·
Strong
·
Em
·
Kbd
フォーム
·
Button
·
Input
·
Text Area
·
Checkbox
·
Switch
·
Radio Group
·
Select
·
Slider
·
Form
·
Upload
データ表示
·
Badge
·
Avatar
·
Icon
·
Callout
·
List
·
Data List
·
Code Block
·
Progress
·
Spinner
·
Scroll Area
·
Moment
開閉と切り替え
·
Tabs
·
Accordion
·
Segmented Control
オーバーレイ
·
Tooltip
·
Popover
·
Hover Card
·
Dialog
·
Alert Dialog
·
Drawer
·
Dropdown Menu
·
Context Menu
·
Toast
動的レンダリング
·
Cond
·
Match
·
Foreach
·
Auto Scroll
メディア
·
Image
·
Audio
·
Video
表とデータグリッド
·
Table
·
Data Table
·
Data Editor
チャート
·
Area Chart
·
Bar Chart
·
Line Chart
·
Composed Chart
·
Pie Chart
·
Radar Chart
·
Radial Bar Chart
·
Scatter Chart
·
Funnel Chart
·
Treemap
·
Sankey Chart
·
Error Bar
チャートの部品
·
Axis
·
Cartesian Grid
·
Chart Tooltip
·
Legend
·
Label
·
Reference
·
Brush
ほかのチャートライブラリ
·
Plotly
·
Pyplot
HTML要素
·
HTML
·
HTML Text
·
HTML Layout
·
HTML Forms
·
HTML Media
·
HTML Tables
·
SVG
そのほかの道具
·
Theme
·
Skeleton
·
Clipboard
·
Html Embed
·
Script
·
Memo
工房の注文書
ソウル店と釜山店の週間訪問者数の推移を2本の線で描いて、流れがどう違うのか比べられるようにしてください。
rx.recharts.line_chartは、点を線でつないで時間による変化を見せるチャートです。大きさそのものより、上がり下がりや傾向が大事なときに使います。チャートの器にdataを渡し、系列ごとにrx.recharts.line(data_key=…)を入れます。
下の例ではこのlinechart_dataを使います。色を指定しなくても、テーマのaccentカラーで描かれます。
linechart_data = [
{"week": "W1", "seoul": 4000, "busan": 2400},
{"week": "W2", "seoul": 3000, "busan": 1398},
{"week": "W3", "seoul": 2000, "busan": 5800},
{"week": "W4", "seoul": 2780, "busan": 3908},
{"week": "W5", "seoul": 1890, "busan": 4800},
{"week": "W6", "seoul": 2390, "busan": 3800},
{"week": "W7", "seoul": 3490, "busan": 4300},
]
rx.recharts.line_chart(
rx.recharts.line(data_key="seoul"),
rx.recharts.line(data_key="busan"),
rx.recharts.x_axis(data_key="week"),
rx.recharts.y_axis(),
data=linechart_data,
width="100%",
height=250,
)線の見た目はほとんどlineで決めます。水曜日の値がNoneのデータなので、connect_nullsをオン・オフすると、途切れた箇所がつながったり空いたりするのがわかります。
プロパティを変えてみる
curve
color
stroke_width
2
dash
dot
connect_nulls
hide
rx.recharts.line_chart(
rx.recharts.line(
data_key="sales",
type_="monotone",
stroke=rx.color("indigo", 9),
stroke_width=2,
stroke_dasharray="",
dot=True,
connect_nulls=False,
hide=False,
),
rx.recharts.x_axis(data_key="day"),
rx.recharts.y_axis(),
rx.recharts.graphing_tooltip(),
data=[
{"day": "Mon", "sales": 12},
{"day": "Tue", "sales": 18},
{"day": "Wed", "sales": None},
{"day": "Thu", "sales": 15},
{"day": "Fri", "sales": 24},
{"day": "Sat", "sales": 20},
],
width="100%",
height=250,
)| プロパティ | 値 | 既定値 | 用途 |
|---|---|---|---|
line_chart(data=) | dictのリスト | なし | チャート全体で使うデータ |
line_chart(layout=) | "horizontal" "vertical" | "horizontal" | 横向きの流れか縦向きの流れか |
line_chart(margin=, sync_id=) | dict / 文字列 | なし | 周りの余白、他のチャートとの連動 |
line(data_key=) | 文字列 | なし | 描く値のキー |
line(type_=) | "monotone" "linear" "natural" "step" … | なし(直線) | 点のつなぎ方 |
line(stroke=, stroke_width=) | 色 / 数値 | accent 9 / 1 | 線の色と太さ |
line(stroke_dasharray=) | "5 5" のような文字列 | なし | 破線 |
line(dot=, active_dot=) | True / False / dict | accent の点 | データの点と、マウスを乗せたときの点 |
line(connect_nulls=) | True / False | False | 空の値を飛ばしてつなげて描く |
line(hide=) | True / False | False | 線を隠す |
line(name=, unit=, legend_type=) | 文字列 | ツールチップ・凡例の名前、単位、凡例のアイコン | |
line(x_axis_id=, y_axis_id=) | 文字列・数値 | 0 | どの軸に付けるか |
on_click on_mouse_enter … | イベント | チャートと線の両方が受け取る。lineにはon_animation_start・on_animation_endもある |
チャート部品を子として入れれば、すぐに付きます。cartesian_gridは背景のグリッド、graphing_tooltipはマウスを乗せた位置の値、legendは系列の名札です。線ごとにtype_="monotone"を指定すると、折れ線がなめらかな曲線になります。
linechart_data = [
{"week": "W1", "seoul": 4000, "busan": 2400},
{"week": "W2", "seoul": 3000, "busan": 1398},
{"week": "W3", "seoul": 2000, "busan": 5800},
{"week": "W4", "seoul": 2780, "busan": 3908},
{"week": "W5", "seoul": 1890, "busan": 4800},
{"week": "W6", "seoul": 2390, "busan": 3800},
{"week": "W7", "seoul": 3490, "busan": 4300},
]
rx.recharts.line_chart(
rx.recharts.line(data_key="seoul", type_="monotone", stroke=rx.color("accent", 9)),
rx.recharts.line(data_key="busan", type_="monotone", stroke=rx.color("teal", 9)),
rx.recharts.x_axis(data_key="week"),
rx.recharts.y_axis(),
rx.recharts.cartesian_grid(stroke_dasharray="3 3"),
rx.recharts.graphing_tooltip(),
rx.recharts.legend(),
data=linechart_data,
width="100%",
height=280,
)軸の中にrx.recharts.labelを子として入れると、軸タイトルが付きます。y軸のタイトルはcustom_attrs={"angle": 270}で縦に立てます。タイトルが入る場所を確保するため、x軸のheightとチャートのmarginを多めに取ります。ラベルの位置の値は、チャート部品のLabelページで詳しく見ます。
linechart_data = [
{"week": "W1", "seoul": 4000, "busan": 2400},
{"week": "W2", "seoul": 3000, "busan": 1398},
{"week": "W3", "seoul": 2000, "busan": 5800},
{"week": "W4", "seoul": 2780, "busan": 3908},
{"week": "W5", "seoul": 1890, "busan": 4800},
{"week": "W6", "seoul": 2390, "busan": 3800},
{"week": "W7", "seoul": 3490, "busan": 4300},
]
rx.recharts.line_chart(
rx.recharts.line(
data_key="seoul",
stroke=rx.color("accent", 9),
stroke_width=2,
type_="natural",
),
rx.recharts.x_axis(
rx.recharts.label(value="Week", position="center"),
data_key="week",
height=60,
axis_line=False,
tick_line=False,
),
rx.recharts.y_axis(
rx.recharts.label(value="Visits", position="left", custom_attrs={"angle": 270}),
axis_line=False,
tick_line=False,
),
rx.recharts.graphing_tooltip(),
data=linechart_data,
margin={"left": 20, "right": 20, "top": 20},
width="100%",
height=300,
)layout="vertical"にすると、線が上から下へ流れます。x軸を数値(type_="number")、y軸を項目(type_="category")に切り替え、四方にmarginを付けて文字が切れないようにします。
linechart_data = [
{"week": "W1", "seoul": 4000, "busan": 2400},
{"week": "W2", "seoul": 3000, "busan": 1398},
{"week": "W3", "seoul": 2000, "busan": 5800},
{"week": "W4", "seoul": 2780, "busan": 3908},
{"week": "W5", "seoul": 1890, "busan": 4800},
{"week": "W6", "seoul": 2390, "busan": 3800},
{"week": "W7", "seoul": 3490, "busan": 4300},
]
rx.recharts.line_chart(
rx.recharts.line(data_key="seoul", stroke=rx.color("accent", 9)),
rx.recharts.line(data_key="busan", stroke=rx.color("teal", 9)),
rx.recharts.x_axis(type_="number"),
rx.recharts.y_axis(data_key="week", type_="category"),
data=linechart_data,
layout="vertical",
margin={"top": 20, "right": 20, "left": 20, "bottom": 20},
width="100%",
height=300,
)dataとtype_にStateの値をつなぎました。ボタンを押すと値が少しずつ揺れ、2つのセレクトボックスでそれぞれの線の形を個別に変えられます。Stateはブラウザのタブごとに別々なので、ほかの人の画面には影響しません。軸を2本使うy_axis_idや、チャートを連動させるsync_idはエリアチャートのページで扱います。
import random
from typing import Any
class LineChartLiveState(rx.State):
data: list[dict[str, Any]] = [
{"week": "W1", "seoul": 4000, "busan": 2400},
{"week": "W2", "seoul": 3000, "busan": 1398},
{"week": "W3", "seoul": 2000, "busan": 5800},
{"week": "W4", "seoul": 2780, "busan": 3908},
{"week": "W5", "seoul": 1890, "busan": 4800},
]
seoul_type: str = "monotone"
busan_type: str = "monotone"
@rx.event
def set_seoul_type(self, value: str):
self.seoul_type = value
@rx.event
def set_busan_type(self, value: str):
self.busan_type = value
@rx.event
def munge(self):
self.data = [
{**row, "seoul": row["seoul"] + random.randint(-500, 500), "busan": row["busan"] + random.randint(-1000, 1000)}
for row in self.data
]
rx.vstack(
rx.recharts.line_chart(
rx.recharts.line(data_key="seoul", type_=LineChartLiveState.seoul_type, stroke=rx.color("accent", 9)),
rx.recharts.line(data_key="busan", type_=LineChartLiveState.busan_type, stroke=rx.color("teal", 9)),
rx.recharts.x_axis(data_key="week"),
rx.recharts.y_axis(),
data=LineChartLiveState.data,
margin={"top": 20, "right": 20, "left": 20, "bottom": 20},
width="100%",
height=280,
),
rx.hstack(
rx.button("Munge data", on_click=LineChartLiveState.munge),
rx.select(
["monotone", "linear", "step", "stepBefore", "stepAfter"],
value=LineChartLiveState.seoul_type,
on_change=LineChartLiveState.set_seoul_type,
),
rx.select(
["monotone", "linear", "step", "stepBefore", "stepAfter"],
value=LineChartLiveState.busan_type,
on_change=LineChartLiveState.set_busan_type,
),
wrap="wrap",
),
width="100%",
)2店舗の線を、色と線の種類(実線・破線)の両方で区別しました。色だけに頼らなければ、白黒印刷でも色覚に特性のある人でも読み取れます。
linechart_data = [
{"week": "W1", "seoul": 4000, "busan": 2400},
{"week": "W2", "seoul": 3000, "busan": 1398},
{"week": "W3", "seoul": 2000, "busan": 5800},
{"week": "W4", "seoul": 2780, "busan": 3908},
{"week": "W5", "seoul": 1890, "busan": 4800},
{"week": "W6", "seoul": 2390, "busan": 3800},
{"week": "W7", "seoul": 3490, "busan": 4300},
]
rx.recharts.line_chart(
rx.recharts.cartesian_grid(stroke_dasharray="3 3", vertical=False),
rx.recharts.line(data_key="seoul", name="Seoul", type_="monotone", stroke=rx.color("accent", 9), stroke_width=2),
rx.recharts.line(
data_key="busan",
name="Busan",
type_="monotone",
stroke=rx.color("teal", 9),
stroke_width=2,
stroke_dasharray="5 4",
),
rx.recharts.x_axis(data_key="week"),
rx.recharts.y_axis(),
rx.recharts.graphing_tooltip(),
rx.recharts.legend(),
data=linechart_data,
width="100%",
height=300,
)工房ノート
line_chart(data=…)の中に、系列ごとにline(data_key=…)を入れる。
type_でつなぎ方(monotone・linear・step…)、stroke・stroke_width・stroke_dasharrayで線の見た目。
dotで点、connect_nullsで空の値を飛ばしてつなぎ、hideで隠す。
軸タイトルは軸の中にrx.recharts.label、場所はmarginと軸のheightで作る。
dataとtype_にStateの値を渡すと、ボタンやセレクトボックスでチャートが変わる。
新しい授業・講座のお知らせを受け取る
この講座に授業が追加されたり、続きの講座が公開されたりしたらメールでお知らせします。
R
ReflexKR
触って学ぶPythonとReflex。すべての例はReflex 0.10.0で実際に動かして確認しています。
ReflexKRはバナー広告なし・無料で運営しています。役に立ったら、コーヒー一杯で応援してください。 ☕ コーヒーで応援する
アフィリエイトと支援について© 2026 ReflexKR · Since 2026 · CC BY-NC 4.0
質問と回答
この回について気になることを書き込んでください。すべての言語のページの質問がここに集まります。