vuejs(ts)에서 그래프(chartjs)를 표시해 봅시다.
14798 단어 chart.jsVue.jsTypeScript
세상에는 데이터를 건네주면 그래프(차트)를 그려 주는 js라고 하는 편리한 것이 있어, chartjs, D3, google chart, TradingView등 여러가지 있습니다.
이번에는 손쉬운
chartjs
를 vue-chartjs
를 이용해 시험해 보았습니다.적당하게 vue에 표본을 만듭니다.
이번에는 typescript를 사용하도록 create하고 있습니다.
~/tmp/chartjs/tekitou master
❯ node --version
v11.10.0
~/tmp/chartjs/tekitou master
❯ cat package.json
{
"name": "tekitou",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"vue": "^2.6.6",
"vue-class-component": "^6.0.0",
"vue-property-decorator": "^8.0.0",
"vue-router": "^3.0.1"
},
"devDependencies": {
"@vue/cli-plugin-typescript": "^3.5.0",
"@vue/cli-service": "^3.5.0",
"typescript": "^3.2.1",
"vue-template-compiler": "^2.5.21"
},
"postcss": {
"plugins": {
"autoprefixer": {}
}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}
vue-chartjs를 넣습니다.
chart.js도 넣어야 하므로 주의를.
특히 이유가 없으면 vue-chartjs를 이용해도 좋을까 생각합니다.
❯ npm install vue-chartjs chart.js
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
+ [email protected]
+ [email protected]
added 6 packages from 10 contributors and audited 21138 packages in 5.047s
found 0 vulnerabilities
죄송합니다. @types 도 필요하네요.
❯ npm install @types/chart.js -D
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
+ @types/[email protected]
added 1 package from 14 contributors and audited 21139 packages in 4.805s
found 0 vulnerabilities
차트의 구성 요소를 Home에 추가합니다.
Home.vue에 불필요한 일 없이 최소한에 추가해 보겠습니다.<TekitouChartComponent>
라는 것을 추가했습니다.
어려워 버리기 때문에 가로 폭을 style로 맞추어 버렸습니다.
@/views/Home.vue<template>
<div class="home">
ここいらにどうでもよいチャートを表示しましょう。
<TekitouChartComponent style="width:360px;"></TekitouChartComponent>
<img alt="Vue logo" src="../assets/logo.png">
<HelloWorld msg="Welcome to Your Vue.js + TypeScript App"/>
</div>
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
import HelloWorld from '@/components/HelloWorld.vue'; // @ is an alias to /src
import TekitouChartComponent from '@/components/TekitouChartComponent.vue';
@Component({
components: {
HelloWorld,
TekitouChartComponent
},
})
export default class Home extends Vue {}
</script>
TekitouChartComponent를 만듭니다.
상위 구성 요소에서 chartData 및 chartOptions로 데이터를 전달하고 this.renderChart에서 chartjs로 데이터를 전달하는 느낌이 듭니다.
@/components/TekitouChartComponent.vue<script lang="ts">
import { Component, Mixins } from "vue-property-decorator";
import Chart from "chart.js";
import { Line, mixins } from "vue-chartjs";
@Component({})
export default class LineChartComponent extends Mixins(Line, mixins.reactiveProp) {
// グラフ用のデータ
private chartData: Chart.ChartData = {
labels: ["1月", "2月", "3月", "4月", "5月"],
datasets: [
{
type: "line",
label: "花粉だめーじ",
data: [20, 10, 30, 40, 30, 20],
fill: true,
borderColor: "#AAFFAA"
}
]
};
// 表示オプションなど(今回は空
private chartOptions: Chart.ChartOptions;
public mounted() {
this.renderChart(this.chartData, this.chartOptions);
}
}
</script>
이제 우선 그래프가 나옵니다.
하지만 이것이라고. . .
실제로 사용하면 서버라든지에서 데이터를 가져와 컴포넌트에 전달하는 것이 일반적이므로 Prop에서 전달하는 느낌입니다.
(dev console에서 warning의 폭풍입니다!)
~/tmp/chartjs/tekitou master
❯ node --version
v11.10.0
~/tmp/chartjs/tekitou master
❯ cat package.json
{
"name": "tekitou",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"vue": "^2.6.6",
"vue-class-component": "^6.0.0",
"vue-property-decorator": "^8.0.0",
"vue-router": "^3.0.1"
},
"devDependencies": {
"@vue/cli-plugin-typescript": "^3.5.0",
"@vue/cli-service": "^3.5.0",
"typescript": "^3.2.1",
"vue-template-compiler": "^2.5.21"
},
"postcss": {
"plugins": {
"autoprefixer": {}
}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}
chart.js도 넣어야 하므로 주의를.
특히 이유가 없으면 vue-chartjs를 이용해도 좋을까 생각합니다.
❯ npm install vue-chartjs chart.js
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
+ [email protected]
+ [email protected]
added 6 packages from 10 contributors and audited 21138 packages in 5.047s
found 0 vulnerabilities
죄송합니다. @types 도 필요하네요.
❯ npm install @types/chart.js -D
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
+ @types/[email protected]
added 1 package from 14 contributors and audited 21139 packages in 4.805s
found 0 vulnerabilities
차트의 구성 요소를 Home에 추가합니다.
Home.vue에 불필요한 일 없이 최소한에 추가해 보겠습니다.<TekitouChartComponent>
라는 것을 추가했습니다.
어려워 버리기 때문에 가로 폭을 style로 맞추어 버렸습니다.
@/views/Home.vue<template>
<div class="home">
ここいらにどうでもよいチャートを表示しましょう。
<TekitouChartComponent style="width:360px;"></TekitouChartComponent>
<img alt="Vue logo" src="../assets/logo.png">
<HelloWorld msg="Welcome to Your Vue.js + TypeScript App"/>
</div>
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
import HelloWorld from '@/components/HelloWorld.vue'; // @ is an alias to /src
import TekitouChartComponent from '@/components/TekitouChartComponent.vue';
@Component({
components: {
HelloWorld,
TekitouChartComponent
},
})
export default class Home extends Vue {}
</script>
TekitouChartComponent를 만듭니다.
상위 구성 요소에서 chartData 및 chartOptions로 데이터를 전달하고 this.renderChart에서 chartjs로 데이터를 전달하는 느낌이 듭니다.
@/components/TekitouChartComponent.vue<script lang="ts">
import { Component, Mixins } from "vue-property-decorator";
import Chart from "chart.js";
import { Line, mixins } from "vue-chartjs";
@Component({})
export default class LineChartComponent extends Mixins(Line, mixins.reactiveProp) {
// グラフ用のデータ
private chartData: Chart.ChartData = {
labels: ["1月", "2月", "3月", "4月", "5月"],
datasets: [
{
type: "line",
label: "花粉だめーじ",
data: [20, 10, 30, 40, 30, 20],
fill: true,
borderColor: "#AAFFAA"
}
]
};
// 表示オプションなど(今回は空
private chartOptions: Chart.ChartOptions;
public mounted() {
this.renderChart(this.chartData, this.chartOptions);
}
}
</script>
이제 우선 그래프가 나옵니다.
하지만 이것이라고. . .
실제로 사용하면 서버라든지에서 데이터를 가져와 컴포넌트에 전달하는 것이 일반적이므로 Prop에서 전달하는 느낌입니다.
(dev console에서 warning의 폭풍입니다!)
<template>
<div class="home">
ここいらにどうでもよいチャートを表示しましょう。
<TekitouChartComponent style="width:360px;"></TekitouChartComponent>
<img alt="Vue logo" src="../assets/logo.png">
<HelloWorld msg="Welcome to Your Vue.js + TypeScript App"/>
</div>
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
import HelloWorld from '@/components/HelloWorld.vue'; // @ is an alias to /src
import TekitouChartComponent from '@/components/TekitouChartComponent.vue';
@Component({
components: {
HelloWorld,
TekitouChartComponent
},
})
export default class Home extends Vue {}
</script>
상위 구성 요소에서 chartData 및 chartOptions로 데이터를 전달하고 this.renderChart에서 chartjs로 데이터를 전달하는 느낌이 듭니다.
@/components/TekitouChartComponent.vue
<script lang="ts">
import { Component, Mixins } from "vue-property-decorator";
import Chart from "chart.js";
import { Line, mixins } from "vue-chartjs";
@Component({})
export default class LineChartComponent extends Mixins(Line, mixins.reactiveProp) {
// グラフ用のデータ
private chartData: Chart.ChartData = {
labels: ["1月", "2月", "3月", "4月", "5月"],
datasets: [
{
type: "line",
label: "花粉だめーじ",
data: [20, 10, 30, 40, 30, 20],
fill: true,
borderColor: "#AAFFAA"
}
]
};
// 表示オプションなど(今回は空
private chartOptions: Chart.ChartOptions;
public mounted() {
this.renderChart(this.chartData, this.chartOptions);
}
}
</script>
이제 우선 그래프가 나옵니다.
하지만 이것이라고. . .
실제로 사용하면 서버라든지에서 데이터를 가져와 컴포넌트에 전달하는 것이 일반적이므로 Prop에서 전달하는 느낌입니다.
(dev console에서 warning의 폭풍입니다!)
라는 것이 정답입니다.
요약
extends Mixins(Line, mixins.reactiveProp)
renderChart에 데이터와 옵션을 전달합니다. chartData
에 정해진 형태로 값을 건네준다. 라벨 및 데이터 세트 그렇게 해서, 그렇게 도움이 되지 않는 기사입니다만, chartjs를 시험해 보았습니다.
우선 그래프를 내고 싶다고 하는 요구에는 대답해 줄까. 반대로 3D로 빙빙 움직이고 싶다! 라고 하는 용도에는 맞지 않을까.
이번에는 Vue가 아니어도 좋았다.
Angular 때는 d3-sharp를 사용했구나. htps : // 기주 b. 이 m/d3/d3-샤페
보충
Reference
이 문제에 관하여(vuejs(ts)에서 그래프(chartjs)를 표시해 봅시다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/murata-tomohide/items/4963236a7eff5fb90d94텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)