|
|
|
|
@ -0,0 +1,98 @@
|
|
|
|
|
import { Line } from "react-chartjs-2";
|
|
|
|
|
import {
|
|
|
|
|
Chart as ChartJS,
|
|
|
|
|
CategoryScale,
|
|
|
|
|
LinearScale,
|
|
|
|
|
BarElement,
|
|
|
|
|
Title,
|
|
|
|
|
Tooltip as ChartTooltip,
|
|
|
|
|
Legend, PointElement, LineElement,
|
|
|
|
|
} from 'chart.js';
|
|
|
|
|
|
|
|
|
|
ChartJS.register(
|
|
|
|
|
CategoryScale,
|
|
|
|
|
PointElement,
|
|
|
|
|
LineElement,
|
|
|
|
|
LinearScale,
|
|
|
|
|
BarElement,
|
|
|
|
|
Title,
|
|
|
|
|
ChartTooltip,
|
|
|
|
|
Legend
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const GRAPH_LABELS_MAP= {
|
|
|
|
|
target_dist_shap: "Расстояние до ближайшего постамата Мой постамат",
|
|
|
|
|
target_post_cnt_shap: "Кол-во точек Мой постамат*",
|
|
|
|
|
target_cnt_ao_mean_shap: "Средний трафик в точках Мой постамат в АО",
|
|
|
|
|
rival_pvz_cnt_shap: "Кол-во ПВЗ*",
|
|
|
|
|
rival_post_cnt_shap: "Кол-во постаматов конкурентов *",
|
|
|
|
|
metro_dist_shap: "Расстояние до метро",
|
|
|
|
|
property_price_bargains_shap: "Цена сделок жилой недвижимости*",
|
|
|
|
|
property_price_offers_shap: "Цена предложений жилой недвижимости*",
|
|
|
|
|
property_mean_floor_shap: "Средняя этажность застройки*",
|
|
|
|
|
property_era_shap: "Эпоха жилой недвижимости*",
|
|
|
|
|
flats_cnt_shap: "Кол-во квартир*",
|
|
|
|
|
popul_home_shap: "Численность проживающего населения*",
|
|
|
|
|
popul_job_shap: "Численность работающего населения*",
|
|
|
|
|
yndxfood_sum_shap: "Сумма заказов Яндекс.Еда*",
|
|
|
|
|
yndxfood_cnt_shap: "Кол-во заказов Яндекс.Еда*",
|
|
|
|
|
school_cnt_shap: "Кол-во школ*",
|
|
|
|
|
kindergar_cnt_shap: "Кол-во детсадов*",
|
|
|
|
|
public_stop_cnt_shap: "Кол-во остановок общ. транспорта*",
|
|
|
|
|
sport_center_cnt_shap: "Кол-во спортивных центров*",
|
|
|
|
|
pharmacy_cnt_shap: "Кол-во аптек*",
|
|
|
|
|
supermarket_cnt_shap: "Кол-во супермаркетов*",
|
|
|
|
|
supermarket_premium_cnt_shap: "Кол-во премиальных супермаркетов*",
|
|
|
|
|
clinic_cnt_shap: "Кол-во поликлиник*",
|
|
|
|
|
bank_cnt_shap: "Кол-во банков*",
|
|
|
|
|
reca_cnt_shap: "Кол-во точек общепита*",
|
|
|
|
|
lab_cnt_shap: "Кол-во лабораторий*",
|
|
|
|
|
culture_cnt_shap: "Кол-во объектов культуры*",
|
|
|
|
|
attraction_cnt_shap: "Кол-во достопримечательностей*",
|
|
|
|
|
mfc_cnt_shap: "Кол-во МФЦ*",
|
|
|
|
|
bc_cnt_shap: "Кол-во бизнес-центров*",
|
|
|
|
|
tc_cnt_shap: "Кол-во торговых центров*",
|
|
|
|
|
business_activity_shap: "Бизнес активность",
|
|
|
|
|
}
|
|
|
|
|
export const PointChart = ({ point }) => {
|
|
|
|
|
const options = {
|
|
|
|
|
indexAxis: 'y',
|
|
|
|
|
elements: {
|
|
|
|
|
bar: {
|
|
|
|
|
borderWidth: 0,
|
|
|
|
|
borderRadius: 5,
|
|
|
|
|
pointStyle: 'circle'
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
plugins: {
|
|
|
|
|
legend: {
|
|
|
|
|
display: false
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
scales: {
|
|
|
|
|
x: {
|
|
|
|
|
title: {
|
|
|
|
|
display: true,
|
|
|
|
|
text: 'Вклад в прогноз, %'
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
const labels = Object.keys(GRAPH_LABELS_MAP).sort((a, b) => {
|
|
|
|
|
if (Math.abs(point[a]) < Math.abs(point[b])) return 1;
|
|
|
|
|
else return -1;
|
|
|
|
|
}).slice(0, 15);
|
|
|
|
|
labels.map((l) => console.log(l, point[l]))
|
|
|
|
|
const data = {
|
|
|
|
|
labels: labels.map((l) => GRAPH_LABELS_MAP[l]),
|
|
|
|
|
datasets: [
|
|
|
|
|
{
|
|
|
|
|
data: labels.map((l) => point[l]),
|
|
|
|
|
backgroundColor: labels.map((l) => point[l]).map(v => v <= 0 ? '#CC2500' : '#278211'),
|
|
|
|
|
hoverBackgroundColor: labels.map((l) => point[l]).map(v => v <= 0 ? '#F22C00' : '#2DB20C'),
|
|
|
|
|
showLine: false
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
};
|
|
|
|
|
return <Line options={options} data={data} />
|
|
|
|
|
}
|