Plotly Subplots에서 동시에 다른 Barmodes(Python)
24577 단어 visualizationpythonplotly
Plotly(Python)를 사용하여 누적 및 그룹화된 막대 차트
Fredrik Sjöstrand ・ 2020년 1월 8일 ・ 4분 읽기
#python
#visualization
#plotly
이것이 아마도 최근에 Plotly 서브플롯에서 두 개의 서로 다른 바 모드를 동시에 가질 수 있는 방법에 대해 묻는 이메일을 받은 이유일 것입니다. 첫 번째 것은 쌓이고 두 번째 것은 그룹화해야 합니다. 항상 그렇듯이 다른 사람이 이 문제를 해결했는지 알아보기 위해 검색을 시작했습니다. 그러나 내가 찾을 수 있는 유일한 게시물은 플롯 커뮤니티 포럼에서 수행할 수 없다는 답변이었습니다. 스포일러 경고, 할 수 있습니다. 그것에 들어가자!
참고: 코드를 살펴보고 싶다면 끝에 있는 하나의 큰 블록으로 전체 예제를 찾을 수 있습니다.
자료
이전 블로그 게시물과 동일한 데이터를 사용하고 있습니다.
data = {
"original":[15, 23, 32, 10, 23],
"model_1": [4, 8, 18, 6, 0],
"model_2": [11, 18, 18, 0, 20],
"labels": [
"feature",
"question",
"bug",
"documentation",
"maintenance"
]
}
원본, model_1, model_2 및 레이블의 4개 열이 있는 테이블/데이터 프레임으로 생각할 수 있습니다. 목록의 내용은 행입니다.
구성
내 초기 연구 결과에 따르면 이를 수행하는 직접적인 방법은 없습니다. 그러나 자연스러운 출발점은 시작하기 위해 서브플롯을 수행하는 방법을 살펴보는 것입니다. 우선, plotly에서 필요한 것이 무엇인지 살펴보겠습니다.
from plotly.subplots import make_subplots
from plotly import graph_objects as go
graph_objects
, 줄여서 go
는 plotly의 핵심 라이브러리입니다. 이 예에서는 막대 차트를 나타내는 Bar 클래스만 사용할 것입니다. 나는 여러분 모두가 우리가 makes_subplots
를 사용하여 서브플롯을 만들 것이라는 것을 이미 알아냈다고 생각합니다.
시작할 표준 서브플롯
시작하는 두 개의 막대 차트가 있는 표준 하위 그림입니다.
fig = make_subplots(rows=2, cols=1)
# Subplot 1
fig.add_trace(
go.Bar(
name="Original",
x=data["labels"],
y=data["original"],
),
row=1,
col=1,
)
# Subplot 2
fig.add_trace(
go.Bar(
name="Model 1",
x=data["labels"],
y=data["model_1"],
),
row=2,
col=1,
)
fig.show()
여기서 흥미로운 일이 많이 일어나지 않습니다. 2개의 행과 1개의 열이 있는 서브플롯을 만듭니다. 그런 다음 두 개의 막대 차트를 추가합니다. 하나는 첫 번째 행에, 다른 하나는 두 번째 행에 추가합니다. 결과는 다음과 같습니다.
각 서브플롯의 다중 막대 차트
자, 이제 확실한 출발점이 생겼습니다. make_subplots
함수는 추적을 추가하는 단일 그림 개체를 반환합니다. 트레이스를 추가할 때 트레이스를 추가해야 하는 서브플롯을 플롯으로 알려줍니다. 각 서브플롯에 여러 막대 차트를 포함하도록 솔루션을 확장해 보겠습니다.
fig = make_subplots(rows=2, cols=1)
# Subplot 1
fig.add_trace(
go.Bar(
name="Original",
x=data["labels"],
y=data["original"],
),
row=1,
col=1,
)
fig.add_trace(
go.Bar(
name="Model 1",
x=data["labels"],
y=data["model_1"],
),
row=1,
col=1,
)
# Subplot 2
fig.add_trace(
go.Bar(
name="Original",
x=data["labels"],
y=data["original"],
),
row=2,
col=1,
)
fig.add_trace(
go.Bar(
name="Model 1",
x=data["labels"],
y=data["model_1"],
),
row=2,
col=1,
)
fig.show()
각 서브플롯에 동일한 데이터를 포함하는 두 개의 막대 차트를 추가합니다. 결과는 다음과 같습니다.
해결책
이제 솔루션의 마지막 단계에 도달할 수 있습니다. 독립 막대 차트의 스타일을 지정합니다. 일반적으로 누적 막대 차트로 변경하려면 다음과 같이 사용했을 것입니다.
fig.update_layout({"barmode":"stack"})
그러나 이것은 자동으로 두 서브플롯을 대상으로 하며 이를 변경할 방법이 없습니다. 그런 다음 해결책은 이전 플롯 게시물에서와 동일한 트릭을 사용하고 수동으로 누적 및 그룹화된 막대 차트를 만드는 것입니다. 이것은 Bar
개체를 직접 변경하고 Figure
의 스타일이 아니기 때문에 작동합니다.
fig = make_subplots(rows=2, cols=1)
# Subplot 1 - Stacked
fig.add_trace(
go.Bar(
name="Original",
x=data["labels"],
y=data["original"],
offsetgroup=0,
),
row=1,
col=1,
)
fig.add_trace(
go.Bar(
name="Model 1",
x=data["labels"],
y=data["model_1"],
offsetgroup=0,
base=data["original"]
),
row=1,
col=1,
)
# Subplot 2 - Grouped
fig.add_trace(
go.Bar(
name="Original",
x=data["labels"],
y=data["original"],
offsetgroup=0,
),
row=2,
col=1,
)
fig.add_trace(
go.Bar(
name="Model 1",
x=data["labels"],
y=data["model_1"],
offsetgroup=1,
),
row=2,
col=1,
)
fig.show()
스택 버전을 생성할 때 두 객체offsetgroup
에 대해 Bar
를 0으로 설정했습니다. 이렇게 하면 x축을 따라 동일한 위치에 배치됩니다. 그러나 두 번째는 위가 아닌 첫 번째 앞에만 렌더링됩니다. 따라서 두 번째base
개체에 대한 Bar
매개변수를 다른 개체의 값 목록으로 설정합니다. 이렇게 하면 "Original"의 해당 막대 높이를 기준으로 "Model 1"의 각 막대의 y 위치가 이동하여 누적 막대 차트가 생성됩니다. 그룹화된 서브플롯을 만들려면 offsetgroup
개체의 Bar
에 다른 값을 할당하기만 하면 됩니다.
참고: 에서 이 스택 및 그룹화가 작동하는 방식에 대해 자세히 알아볼 수 있습니다.
이제 마지막 공개입니다.
엔터티 예시
완성된 전체 예제에 대한 모든 코드는 다음과 같습니다. 플롯으로 설치했다면 예를 들어 이것을 복사하여 붙여넣을 수 있습니다. Jupyter 노트북으로 최종 플롯을 얻습니다.
from plotly.subplots import make_subplots
from plotly import graph_objects as go
data = {
"original":[15, 23, 32, 10, 23],
"model_1": [4, 8, 18, 6, 0],
"model_2": [11, 18, 18, 0, 20],
"labels": [
"feature",
"question",
"bug",
"documentation",
"maintenance"
]
}
fig = make_subplots(rows=2, cols=1)
# Subplot 1 - Stacked
fig.add_trace(
go.Bar(
name="Original",
x=data["labels"],
y=data["original"],
offsetgroup=0,
),
row=1,
col=1,
)
fig.add_trace(
go.Bar(
name="Model 1",
x=data["labels"],
y=data["model_1"],
offsetgroup=0,
base=data["original"]
),
row=1,
col=1,
)
# Subplot 2 - Grouped
fig.add_trace(
go.Bar(
name="Original",
x=data["labels"],
y=data["original"],
offsetgroup=0,
),
row=2,
col=1,
)
fig.add_trace(
go.Bar(
name="Model 1",
x=data["labels"],
y=data["model_1"],
offsetgroup=1,
),
row=2,
col=1,
)
fig.show()
Reference
이 문제에 관하여(Plotly Subplots에서 동시에 다른 Barmodes(Python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/fronkan/different-barmodes-simultaneously-in-a-plotly-subplot-python-1efc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
data = {
"original":[15, 23, 32, 10, 23],
"model_1": [4, 8, 18, 6, 0],
"model_2": [11, 18, 18, 0, 20],
"labels": [
"feature",
"question",
"bug",
"documentation",
"maintenance"
]
}
내 초기 연구 결과에 따르면 이를 수행하는 직접적인 방법은 없습니다. 그러나 자연스러운 출발점은 시작하기 위해 서브플롯을 수행하는 방법을 살펴보는 것입니다. 우선, plotly에서 필요한 것이 무엇인지 살펴보겠습니다.
from plotly.subplots import make_subplots
from plotly import graph_objects as go
graph_objects
, 줄여서 go
는 plotly의 핵심 라이브러리입니다. 이 예에서는 막대 차트를 나타내는 Bar 클래스만 사용할 것입니다. 나는 여러분 모두가 우리가 makes_subplots
를 사용하여 서브플롯을 만들 것이라는 것을 이미 알아냈다고 생각합니다.시작할 표준 서브플롯
시작하는 두 개의 막대 차트가 있는 표준 하위 그림입니다.
fig = make_subplots(rows=2, cols=1)
# Subplot 1
fig.add_trace(
go.Bar(
name="Original",
x=data["labels"],
y=data["original"],
),
row=1,
col=1,
)
# Subplot 2
fig.add_trace(
go.Bar(
name="Model 1",
x=data["labels"],
y=data["model_1"],
),
row=2,
col=1,
)
fig.show()
여기서 흥미로운 일이 많이 일어나지 않습니다. 2개의 행과 1개의 열이 있는 서브플롯을 만듭니다. 그런 다음 두 개의 막대 차트를 추가합니다. 하나는 첫 번째 행에, 다른 하나는 두 번째 행에 추가합니다. 결과는 다음과 같습니다.
각 서브플롯의 다중 막대 차트
자, 이제 확실한 출발점이 생겼습니다.
make_subplots
함수는 추적을 추가하는 단일 그림 개체를 반환합니다. 트레이스를 추가할 때 트레이스를 추가해야 하는 서브플롯을 플롯으로 알려줍니다. 각 서브플롯에 여러 막대 차트를 포함하도록 솔루션을 확장해 보겠습니다.fig = make_subplots(rows=2, cols=1)
# Subplot 1
fig.add_trace(
go.Bar(
name="Original",
x=data["labels"],
y=data["original"],
),
row=1,
col=1,
)
fig.add_trace(
go.Bar(
name="Model 1",
x=data["labels"],
y=data["model_1"],
),
row=1,
col=1,
)
# Subplot 2
fig.add_trace(
go.Bar(
name="Original",
x=data["labels"],
y=data["original"],
),
row=2,
col=1,
)
fig.add_trace(
go.Bar(
name="Model 1",
x=data["labels"],
y=data["model_1"],
),
row=2,
col=1,
)
fig.show()
각 서브플롯에 동일한 데이터를 포함하는 두 개의 막대 차트를 추가합니다. 결과는 다음과 같습니다.
해결책
이제 솔루션의 마지막 단계에 도달할 수 있습니다. 독립 막대 차트의 스타일을 지정합니다. 일반적으로 누적 막대 차트로 변경하려면 다음과 같이 사용했을 것입니다.
fig.update_layout({"barmode":"stack"})
그러나 이것은 자동으로 두 서브플롯을 대상으로 하며 이를 변경할 방법이 없습니다. 그런 다음 해결책은 이전 플롯 게시물에서와 동일한 트릭을 사용하고 수동으로 누적 및 그룹화된 막대 차트를 만드는 것입니다. 이것은
Bar
개체를 직접 변경하고 Figure
의 스타일이 아니기 때문에 작동합니다.fig = make_subplots(rows=2, cols=1)
# Subplot 1 - Stacked
fig.add_trace(
go.Bar(
name="Original",
x=data["labels"],
y=data["original"],
offsetgroup=0,
),
row=1,
col=1,
)
fig.add_trace(
go.Bar(
name="Model 1",
x=data["labels"],
y=data["model_1"],
offsetgroup=0,
base=data["original"]
),
row=1,
col=1,
)
# Subplot 2 - Grouped
fig.add_trace(
go.Bar(
name="Original",
x=data["labels"],
y=data["original"],
offsetgroup=0,
),
row=2,
col=1,
)
fig.add_trace(
go.Bar(
name="Model 1",
x=data["labels"],
y=data["model_1"],
offsetgroup=1,
),
row=2,
col=1,
)
fig.show()
스택 버전을 생성할 때 두 객체
offsetgroup
에 대해 Bar
를 0으로 설정했습니다. 이렇게 하면 x축을 따라 동일한 위치에 배치됩니다. 그러나 두 번째는 위가 아닌 첫 번째 앞에만 렌더링됩니다. 따라서 두 번째base
개체에 대한 Bar
매개변수를 다른 개체의 값 목록으로 설정합니다. 이렇게 하면 "Original"의 해당 막대 높이를 기준으로 "Model 1"의 각 막대의 y 위치가 이동하여 누적 막대 차트가 생성됩니다. 그룹화된 서브플롯을 만들려면 offsetgroup
개체의 Bar
에 다른 값을 할당하기만 하면 됩니다.참고: 에서 이 스택 및 그룹화가 작동하는 방식에 대해 자세히 알아볼 수 있습니다.
이제 마지막 공개입니다.
엔터티 예시
완성된 전체 예제에 대한 모든 코드는 다음과 같습니다. 플롯으로 설치했다면 예를 들어 이것을 복사하여 붙여넣을 수 있습니다. Jupyter 노트북으로 최종 플롯을 얻습니다.
from plotly.subplots import make_subplots
from plotly import graph_objects as go
data = {
"original":[15, 23, 32, 10, 23],
"model_1": [4, 8, 18, 6, 0],
"model_2": [11, 18, 18, 0, 20],
"labels": [
"feature",
"question",
"bug",
"documentation",
"maintenance"
]
}
fig = make_subplots(rows=2, cols=1)
# Subplot 1 - Stacked
fig.add_trace(
go.Bar(
name="Original",
x=data["labels"],
y=data["original"],
offsetgroup=0,
),
row=1,
col=1,
)
fig.add_trace(
go.Bar(
name="Model 1",
x=data["labels"],
y=data["model_1"],
offsetgroup=0,
base=data["original"]
),
row=1,
col=1,
)
# Subplot 2 - Grouped
fig.add_trace(
go.Bar(
name="Original",
x=data["labels"],
y=data["original"],
offsetgroup=0,
),
row=2,
col=1,
)
fig.add_trace(
go.Bar(
name="Model 1",
x=data["labels"],
y=data["model_1"],
offsetgroup=1,
),
row=2,
col=1,
)
fig.show()
Reference
이 문제에 관하여(Plotly Subplots에서 동시에 다른 Barmodes(Python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/fronkan/different-barmodes-simultaneously-in-a-plotly-subplot-python-1efc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from plotly.subplots import make_subplots
from plotly import graph_objects as go
data = {
"original":[15, 23, 32, 10, 23],
"model_1": [4, 8, 18, 6, 0],
"model_2": [11, 18, 18, 0, 20],
"labels": [
"feature",
"question",
"bug",
"documentation",
"maintenance"
]
}
fig = make_subplots(rows=2, cols=1)
# Subplot 1 - Stacked
fig.add_trace(
go.Bar(
name="Original",
x=data["labels"],
y=data["original"],
offsetgroup=0,
),
row=1,
col=1,
)
fig.add_trace(
go.Bar(
name="Model 1",
x=data["labels"],
y=data["model_1"],
offsetgroup=0,
base=data["original"]
),
row=1,
col=1,
)
# Subplot 2 - Grouped
fig.add_trace(
go.Bar(
name="Original",
x=data["labels"],
y=data["original"],
offsetgroup=0,
),
row=2,
col=1,
)
fig.add_trace(
go.Bar(
name="Model 1",
x=data["labels"],
y=data["model_1"],
offsetgroup=1,
),
row=2,
col=1,
)
fig.show()
Reference
이 문제에 관하여(Plotly Subplots에서 동시에 다른 Barmodes(Python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/fronkan/different-barmodes-simultaneously-in-a-plotly-subplot-python-1efc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)