diff --git a/src/components/Charts/data/general/mentions/datasets-with-implicit-mentions-only.js b/src/components/Charts/data/general/mentions/datasets-with-at-least-one-explicit-mention.js similarity index 93% rename from src/components/Charts/data/general/mentions/datasets-with-implicit-mentions-only.js rename to src/components/Charts/data/general/mentions/datasets-with-at-least-one-explicit-mention.js index a605472d..727c0ae4 100644 --- a/src/components/Charts/data/general/mentions/datasets-with-implicit-mentions-only.js +++ b/src/components/Charts/data/general/mentions/datasets-with-at-least-one-explicit-mention.js @@ -22,9 +22,8 @@ const Chart = ({ domain, hasComments, hasFooter, id }) => { const chartRef = useRef(); const intl = useIntl(); const [chartComments, setChartComments] = useState(''); - const { beforeLastObservationSnap, lastObservationSnap } = useGlobals(); + const { lastObservationSnap } = useGlobals(); const { allData, isError, isLoading } = useGetData( - beforeLastObservationSnap, lastObservationSnap, domain, ); @@ -74,7 +73,7 @@ Chart.defaultProps = { domain: '', hasComments: true, hasFooter: true, - id: 'data.general.mentions.datasets-with-implicit-mentions-only', + id: 'data.general.mentions.datasets-with-at-least-one-explicit-mention', }; Chart.propTypes = { domain: PropTypes.oneOf(domains), diff --git a/src/components/Charts/data/general/mentions/get-data.js b/src/components/Charts/data/general/mentions/get-data.js index 5cd52f9b..79e9f10d 100644 --- a/src/components/Charts/data/general/mentions/get-data.js +++ b/src/components/Charts/data/general/mentions/get-data.js @@ -4,13 +4,9 @@ import { useIntl } from 'react-intl'; import { ES_API_URL, HEADERS } from '../../../../../config/config'; import getFetchOptions from '../../../../../utils/chartFetchOptions'; -import { - capitalize, - getCSSValue, - getObservationLabel, -} from '../../../../../utils/helpers'; +import { capitalize, getCSSValue } from '../../../../../utils/helpers'; -function useGetData(beforeLastObservationSnap, observationSnap, domain) { +function useGetData(observationSnap, domain) { const intl = useIntl(); const [allData, setData] = useState({}); const [isError, setError] = useState(false); @@ -19,7 +15,7 @@ function useGetData(beforeLastObservationSnap, observationSnap, domain) { const getDataForLastObservationSnap = useCallback( async (lastObservationSnap) => { const query = getFetchOptions({ - key: 'datasetsWithImplicitMentionsOnly', + key: 'datasetsWithAtLeastOneExplicitMention', domain, parameters: [lastObservationSnap], objectType: ['publications'], @@ -30,7 +26,7 @@ function useGetData(beforeLastObservationSnap, observationSnap, domain) { ); const bsoDomain = intl.formatMessage({ id: `app.bsoDomain.${domain}` }); const years = []; - const shared = []; + const publications = []; const noOutline = { style: { textOutline: 'none', @@ -47,15 +43,16 @@ function useGetData(beforeLastObservationSnap, observationSnap, domain) { years.push(el.key); const numberOfDatasetsWithImplicitMentionsOnly = el.is_implicit.buckets.find((item) => item.key === 1)?.doc_count || 0; - const numberOfDatasetsWithMixedMentions = el.is_implicit.buckets.find((item) => item.key === 0)?.doc_count + const numberOfDatasetsWithAtLeastOneExplicitMention = el.is_implicit.buckets.find((item) => item.key === 0)?.doc_count || 0; const numberOfDatasets = numberOfDatasetsWithImplicitMentionsOnly - + numberOfDatasetsWithMixedMentions; - shared.push({ + + numberOfDatasetsWithAtLeastOneExplicitMention; + publications.push({ y: - (numberOfDatasetsWithImplicitMentionsOnly / numberOfDatasets) + (numberOfDatasetsWithAtLeastOneExplicitMention + / numberOfDatasets) * 100, - y_abs: numberOfDatasetsWithImplicitMentionsOnly, + y_abs: numberOfDatasetsWithAtLeastOneExplicitMention, y_tot: numberOfDatasets, x: el.key, bsoDomain, @@ -69,7 +66,7 @@ function useGetData(beforeLastObservationSnap, observationSnap, domain) { id: 'app.publication', }), ), - data: shared, + data: publications, color: getCSSValue('--publication-100'), dataLabels: noOutline, }, diff --git a/src/components/Charts/software/general/mentions/get-data.js b/src/components/Charts/software/general/mentions/get-data.js new file mode 100644 index 00000000..5537d4ad --- /dev/null +++ b/src/components/Charts/software/general/mentions/get-data.js @@ -0,0 +1,103 @@ +import Axios from 'axios'; +import { useCallback, useEffect, useState } from 'react'; +import { useIntl } from 'react-intl'; + +import { ES_API_URL, HEADERS } from '../../../../../config/config'; +import getFetchOptions from '../../../../../utils/chartFetchOptions'; +import { capitalize, getCSSValue } from '../../../../../utils/helpers'; + +function useGetData(observationSnap, domain) { + const intl = useIntl(); + const [allData, setData] = useState({}); + const [isError, setError] = useState(false); + const [isLoading, setLoading] = useState(true); + + const getDataForLastObservationSnap = useCallback( + async (lastObservationSnap) => { + const query = getFetchOptions({ + key: 'codeWithAtLeastOneExplicitMention', + domain, + parameters: [lastObservationSnap], + objectType: ['publications'], + }); + const res = await Axios.post(ES_API_URL, query, HEADERS); + const data = res.data.aggregations.by_publication_year.buckets.sort( + (a, b) => a.key - b.key, + ); + const bsoDomain = intl.formatMessage({ id: `app.bsoDomain.${domain}` }); + const years = []; + const publications = []; + const noOutline = { + style: { + textOutline: 'none', + }, + }; + data + .filter( + (el) => el.key > 2012 + && lastObservationSnap.length + && parseInt(el.key, 10) + < parseInt(lastObservationSnap?.substring(0, 4), 10), + ) + .forEach((el) => { + years.push(el.key); + const numberOfSoftwareWithImplicitMentionsOnly = el.is_implicit.buckets.find((item) => item.key === 1)?.doc_count + || 0; + const numberOfSoftwareWithAtLeastOneExplicitMention = el.is_implicit.buckets.find((item) => item.key === 0)?.doc_count + || 0; + const numberOfSoftware = numberOfSoftwareWithImplicitMentionsOnly + + numberOfSoftwareWithAtLeastOneExplicitMention; + publications.push({ + y: + (numberOfSoftwareWithAtLeastOneExplicitMention + / numberOfSoftware) + * 100, + y_abs: numberOfSoftwareWithAtLeastOneExplicitMention, + y_tot: numberOfSoftware, + x: el.key, + bsoDomain, + }); + }); + + const dataGraph = [ + { + name: capitalize( + intl.formatMessage({ + id: 'app.publication', + }), + ), + data: publications, + color: getCSSValue('--publication-100'), + dataLabels: noOutline, + }, + ]; + + return { + categories: years, + dataGraph, + }; + }, + [domain, intl], + ); + + useEffect(() => { + async function getData() { + try { + const dataGraph = await getDataForLastObservationSnap(observationSnap); + setData(dataGraph); + } catch (e) { + // eslint-disable-next-line no-console + console.error(e); + setError(true); + } finally { + setLoading(false); + } + } + getData(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [observationSnap]); + + return { allData, isError, isLoading }; +} + +export default useGetData; diff --git a/src/components/Charts/software/general/mentions/software-with-at-least-one-explicit-mention.js b/src/components/Charts/software/general/mentions/software-with-at-least-one-explicit-mention.js new file mode 100644 index 00000000..428304b9 --- /dev/null +++ b/src/components/Charts/software/general/mentions/software-with-at-least-one-explicit-mention.js @@ -0,0 +1,85 @@ +import Highcharts from 'highcharts'; +import HCExportingData from 'highcharts/modules/export-data'; +import HCExporting from 'highcharts/modules/exporting'; +import HighchartsReact from 'highcharts-react-official'; +import PropTypes from 'prop-types'; +import React, { useEffect, useRef, useState } from 'react'; +import { useIntl } from 'react-intl'; + +import customComments from '../../../../../utils/chartComments'; +import { chartOptions } from '../../../../../utils/chartOptions'; +import { domains, graphIds } from '../../../../../utils/constants'; +import { getObservationLabel, withDomain } from '../../../../../utils/helpers'; +import useGlobals from '../../../../../utils/Hooks/useGetGlobals'; +import WrapperChart from '../../../../WrapperChart'; +import GraphComments from '../../../graph-comments'; +import useGetData from './get-data'; + +HCExporting(Highcharts); +HCExportingData(Highcharts); + +const Chart = ({ domain, hasComments, hasFooter, id }) => { + const chartRef = useRef(); + const intl = useIntl(); + const [chartComments, setChartComments] = useState(''); + const { lastObservationSnap } = useGlobals(); + const { allData, isError, isLoading } = useGetData( + lastObservationSnap, + domain, + ); + const { categories, dataGraph } = allData; + const dataTitle = { + observationYear: getObservationLabel(lastObservationSnap, intl), + }; + const idWithDomain = withDomain(id, domain); + const optionsGraph = chartOptions[id].getOptions( + idWithDomain, + intl, + categories, + dataGraph, + dataTitle, + ); + const hasBeta = true; + useEffect(() => { + setChartComments(customComments(allData, idWithDomain, intl)); + }, [allData, idWithDomain, intl]); + + return ( + + + {hasComments && chartComments && ( + + )} + + ); +}; + +Chart.defaultProps = { + domain: '', + hasComments: true, + hasFooter: true, + id: 'software.general.mentions.software-with-at-least-one-explicit-mention', +}; +Chart.propTypes = { + domain: PropTypes.oneOf(domains), + hasComments: PropTypes.bool, + hasFooter: PropTypes.bool, + id: PropTypes.oneOf(graphIds), +}; + +export default Chart; diff --git a/src/pages/BaroNational/NationalResearchData/index.js b/src/pages/BaroNational/NationalResearchData/index.js index 19c2ef19..4e4b670f 100644 --- a/src/pages/BaroNational/NationalResearchData/index.js +++ b/src/pages/BaroNational/NationalResearchData/index.js @@ -155,7 +155,6 @@ export default function NationalResearchData() { @@ -163,11 +162,10 @@ export default function NationalResearchData() { - + diff --git a/src/pages/BaroNational/NationalSoftwareCode/index.js b/src/pages/BaroNational/NationalSoftwareCode/index.js index e5901da1..81ef8c88 100644 --- a/src/pages/BaroNational/NationalSoftwareCode/index.js +++ b/src/pages/BaroNational/NationalSoftwareCode/index.js @@ -20,7 +20,7 @@ import QuestionSection from '../../../components/question-section'; import ScrollTop from '../../../components/ScrollTop'; import GlossaryEntries from '../../../translations/glossary.json'; import { mobileButtonLabel } from '../../../utils/constants'; -import { getCSSValue } from '../../../utils/helpers'; +import { getCSSValue, isInProduction } from '../../../utils/helpers'; import useLang from '../../../utils/Hooks/useLang'; export default function NationalSoftwareCode() { @@ -145,6 +145,14 @@ export default function NationalSoftwareCode() { > + + + diff --git a/src/translations/en.json b/src/translations/en.json index c4bd7b02..a2355283 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -1250,6 +1250,7 @@ "app.data.navigation.editeurs.statement": "Data availability statement", "app.data.navigation.partage": "Datasets sharing", "app.data.navigation.statement": "Data availability statement", + "app.data.navigation.mentions": "Explicit references to datasets", "app.data.navigation.utilisation": "Datasets use", "app.doi": "with a Crossref DOI", "app.doi-hal": "with a Crossref DOI or hal ID", @@ -1324,8 +1325,8 @@ "app.national-data.general.voies-ouverture.chart-availibility.tooltip": "Publication year {point.x}
{point.y:.2f}% of publications ((commentsName)) have a Data Availability Statement
({point.y_abs} / {point.y_tot} analysed publications)", "app.national-data.general.voies-ouverture.chart-availibility.comments": "This graph shows the proportion of publications that report making data available (mention of a Data Availability Statement identified), by publication year. The presence of a Data Availability Statement in the body of the publication does not mean that the authors of the publication actually share their data when requested. This detection is achieved through an automatic analysis of the full text by the GROBID tool.", "app.national-data.general.mentions.title": "Are the datasets mentioned by name?", - "app.national-data.general.mentions.datasets-with-implicit-mentions-only.title": "Proportion of publications containing only implicit references to datasets", - "app.national-data.general.mentions.datasets-with-implicit-mentions-only.tooltip": "{point.y:.2f}% of French publications published in {point.x} and mentioning datasets
mention them implicitly only
({point.y_abs} / {point.y_tot} publications mentioning datasets)", + "app.national-data.general.mentions.datasets-with-at-least-one-explicit-mention.title": "Proportion of publications with at least one explicit reference to a dataset", + "app.national-data.general.mentions.datasets-with-at-least-one-explicit-mention.tooltip": "{point.y:.2f} % of French publications published in {point.x} mention
at least one dataset explicitly
({point.y_abs} / {point.y_tot} publications mentioning datasets)", "app.national-data.disciplines.utilisation.title": "What is the level of data usage by discipline?", "app.national-data.disciplines.creation.title": "What is the level of data production by discipline?", "app.national-data.disciplines.partage.title": "What is the level of data sharing by discipline?", @@ -1388,7 +1389,7 @@ "app.national-thesis.general.dynamique-ouverture.description": "The open access rate of French PhD theses shows a clear trend towards more and more openness. A small half of the theses defended in 2010 are open, while about ¾ of the theses defended at the end of the 2010s are open. The embargo periods temporarily show a slight decrease of the opening rate for the most recent years of defences.The majority of doctoral theses are available in open access on the Internet, sometimes after a period of restriction. The temporal restrictions in the diffusion are of two kinds, embargo or confidentiality, and depend on the type of diffusion, free or restricted, chosen by the author:- the embargo applies only to theses intended to be disseminated on the Internet. During the embargo period, the thesis must be disseminated in restricted access, in the French academic community.- the confidentiality can apply as well to the theses intended to be diffused in free access on internet as to the theses intended to be diffused in restricted access within the premises of the institution of defense or of the French university community. During the period of confidentiality, no one can have access to the thesis. For the most recent years, the opening rate appears slightly lower, notably because of the embargo periods of one year on average.", "app.national-thesis.general.dynamique-ouverture.title": "What are the trends of the opening of doctoral theses in France?", "app.publications.local": "publications {commentsName}", - "app.implicit-mentions-only": "Proportion of publications containing only implicit references to datasets", + "app.with-at-least-one-explicit-mention": "Proportion of publications with at least one explicit reference to a dataset", "app.created-data": "Proportion of publications mentionning a production of data", "app.shared-data": "Proportion of publications mentionning a share of data", "app.created-software": "Proportion of publications mentionning a code or software creation", diff --git a/src/translations/fr.json b/src/translations/fr.json index 8e1f2bf2..37e09350 100644 --- a/src/translations/fr.json +++ b/src/translations/fr.json @@ -54,6 +54,7 @@ "app.data.navigation.creation": "Production de jeux de données", "app.data.navigation.utilisation": "Utilisation des données", "app.data.navigation.statement": "Data availability statement", + "app.data.navigation.mentions": "Mentions explicites de jeux de données", "app.data.navigation.disciplines.partage": "Partage des jeux de données", "app.data.navigation.disciplines.creation": "Production de jeux de données", "app.data.navigation.disciplines.utilisation": "Utilisation des données", @@ -120,8 +121,8 @@ "app.national-data.general.voies-ouverture.chart-availibility.tooltip": "Année de publication {point.x}
{point.y:.2f} % des publications ((commentsName)) présentent un Data Availability Statement
({point.y_abs} / {point.y_tot} publications analysées)", "app.national-data.general.voies-ouverture.chart-availibility.comments": "Ce graphique montre la proportion de publications qui déclarent rendre disponibles les données (mention d'un Data Availability Statement identifiée), par année de publication. La présence d'un Data Availability Statement dans le corps de la publication ne signifie pas pour autant que les auteurs de la publication partagent effectivement leurs données quand la demande leur en est faite. Cette détection est réalisée grâce à une analyse automatique du texte intégral par l'outil GROBID.", "app.national-data.general.mentions.title": "Les jeux de données mentionnés le sont-ils nommément ?", - "app.national-data.general.mentions.datasets-with-implicit-mentions-only.title": "Proportion de publications comportant exclusivement des mentions implicites de jeux de données", - "app.national-data.general.mentions.datasets-with-implicit-mentions-only.tooltip": "{point.y:.2f} % des publications françaises parues en {point.x} et mentionnant des jeux de données
ne les mentionnent qu'implicitement uniquement
({point.y_abs} / {point.y_tot} publications mentionnant des jeux de données)", + "app.national-data.general.mentions.datasets-with-at-least-one-explicit-mention.title": "Proportion des publications avec au moins une mention explicite à un jeu de données", + "app.national-data.general.mentions.datasets-with-at-least-one-explicit-mention.tooltip": "{point.y:.2f} % des publications françaises parues en {point.x} mentionnent
au moins un jeu de données de façon explicite
({point.y_abs} / {point.y_tot} publications mentionnant des jeux de données)", "app.national-data.disciplines.utilisation.title": "Quel est le niveau d'utilisation de données par discipline ?", "app.national-data.disciplines.creation.title": "Quel est le niveau de production de données par discipline ?", "app.national-data.disciplines.partage.title": "Quel est le niveau de partage de données par discipline ?", @@ -1279,7 +1280,7 @@ "app.publications.global": "publications françaises (tous domaines)", "app.publications.health": "publications françaises en santé", "app.publications.local": "publications {commentsName}", - "app.implicit-mentions-only": "Proportion des publications comportant exclusivement des mentions implicites de jeux de données", + "app.with-at-least-one-explicit-mention": "Proportion des publications avec au moins une mention explicite à un jeu de données", "app.publishers": "éditeurs et plateformes", "app.publishers-filter-label": "Sélectionner un éditeur", "app.publishers.apc-gold": "APC Gold", diff --git a/src/utils/chartComponents.js b/src/utils/chartComponents.js index ec106462..3d72941b 100644 --- a/src/utils/chartComponents.js +++ b/src/utils/chartComponents.js @@ -1,129 +1,5 @@ import { lazy } from 'react'; -const ChartClassementPays = lazy(() => import( - '../components/Charts/publications/affiliations/pays/chart-classement-pays' -)); -const ChartEvolutionTauxOuvertureRangUtile = lazy(() => import( - '../components/Charts/publications/affiliations/pays/chart-taux-rang-utile' -)); -const ChartNombreDocumentsDepotsRepositories = lazy(() => import( - '../components/Charts/publications/archives/dynamique-depot/chart-nombre-documents-depots' -)); -const ChartTauxCouvertureHAL = lazy(() => import( - '../components/Charts/publications/archives/dynamique-hal/chart-couverture-hal' -)); -const ChartTauxOuvertureArchives = lazy(() => import( - '../components/Charts/publications/archives/dynamique-ouverture/chart-taux-ouverture' -)); -const ChartTauxPresenceRepositories = lazy(() => import( - '../components/Charts/publications/archives/dynamique-ouverture/chart-taux-presence' -)); -const ChartNombreDocumentsRepositories = lazy(() => import( - '../components/Charts/publications/archives/plus-utilisees/chart-nombre-documents' -)); -const ChartEvolutionTauxOuvertureDisciplines = lazy(() => import( - '../components/Charts/publications/disciplines/dynamique-ouverture/chart-evolution-taux-ouverture' -)); -const ChartTauxOuvertureDisciplines = lazy(() => import( - '../components/Charts/publications/disciplines/dynamique-ouverture/chart-taux-ouverture' -)); -const ChartEvolutionComparaisonTypesHebergementDisciplines = lazy(() => import( - '../components/Charts/publications/disciplines/voies-ouverture/chart-evolution-comparaison-types-hebergement' -)); -const ChartRepartitionPublicationsDisciplines = lazy(() => import( - '../components/Charts/publications/disciplines/voies-ouverture/chart-repartition-publications' -)); -const ChartDepensesEstimeesPublishers = lazy(() => import( - '../components/Charts/publications/editeurs/couts-publication/chart-depenses-estimees' -)); -const ChartDistributionPublishers = lazy(() => import( - '../components/Charts/publications/editeurs/couts-publication/chart-distribution' -)); -const ChartDistributionParAnnee = lazy(() => import( - '../components/Charts/publications/editeurs/couts-publication/chart-distribution-par-annee' -)); -const ChartEvolutionProportionPublishers = lazy(() => import( - '../components/Charts/publications/editeurs/dynamique-ouverture/chart-evolution-proportion' -)); -const ChartTauxOuverturePublishers = lazy(() => import( - '../components/Charts/publications/editeurs/dynamique-ouverture/chart-taux-ouverture' -)); -const ChartRepartitionPublishers = lazy(() => import( - '../components/Charts/publications/editeurs/poids-revues/chart-repartition' -)); -const ChartTauxOuvertureJournals = lazy(() => import( - '../components/Charts/publications/editeurs/dynamique-ouverture-journals/chart-taux-ouverture' -)); -const ChartClassementPublishers = lazy(() => import( - '../components/Charts/publications/editeurs/politiques-ouverture/chart-classement' -)); -const ChartComparaisonPublishers = lazy(() => import( - '../components/Charts/publications/editeurs/politiques-ouverture/chart-comparaison' -)); -const ChartClassementLicencesPublishers = lazy(() => import( - '../components/Charts/publications/editeurs/repartition-licences/chart-classement' -)); -const ChartRepartitionLicencesPublishers = lazy(() => import( - '../components/Charts/publications/editeurs/repartition-licences/chart-repartition' -)); -const ChartEvolutionRepartitionPublishers = lazy(() => import( - '../components/Charts/publications/editeurs/type-ouverture/chart-evolution-repartition' -)); -const ChartRepartitionModelesPublishers = lazy(() => import( - '../components/Charts/publications/editeurs/type-ouverture/chart-repartition-modeles' -)); -const ChartEvolutionProportion = lazy(() => import( - '../components/Charts/publications/general/dynamique-ouverture/chart-evolution-proportion' -)); -const ChartTauxOuverture = lazy(() => import( - '../components/Charts/publications/general/dynamique-ouverture/chart-taux-ouverture' -)); -const ChartTauxOuvertureArticle = lazy(() => import( - '../components/Charts/publications/general/dynamique-ouverture/chart-taux-ouverture-article' -)); -const ChartGenreOuverture = lazy(() => import( - '../components/Charts/publications/general/genres-ouverture/genres-ouverture' -)); -const ChartGenreOuvertureEvolution = lazy(() => import( - '../components/Charts/publications/general/genres-ouverture/chart-evolution-proportion' -)); -const ChartRepartitionFinancements = lazy(() => import( - '../components/Charts/publications/general/impact-financement/chart-repartition-financements' -)); -const ChartTauxOuvertureFinancement = lazy(() => import( - '../components/Charts/publications/general/impact-financement/chart-taux-ouverture' -)); -const ChartTauxOuvertureFinancementBusinessModel = lazy(() => import( - '../components/Charts/publications/general/impact-financement/chart-business-model' -)); -const ChartTauxOuvertureFinancementAllGrants = lazy(() => import( - '../components/Charts/publications/general/impact-financement/chart-taux-ouverture-all-grants' -)); -const ChartRepartitionTauxFinancement = lazy(() => import( - '../components/Charts/publications/general/impact-financement/chart-repartition-taux' -)); -const ChartLanguesOuverture = lazy(() => import( - '../components/Charts/publications/general/langues-ouverture/langues-ouverture' -)); -const ChartLanguesByYear = lazy(() => import( - '../components/Charts/publications/general/langues-evolution/langues-by-year' -)); -const ChartRepartitionPublications = lazy(() => import( - '../components/Charts/publications/general/voies-ouverture/chart-repartition-publications' -)); -const ChartRepartitionTaux = lazy(() => import( - '../components/Charts/publications/general/voies-ouverture/chart-repartition-taux' -)); -const ChartTauxOuvertureAffiliations = lazy(() => import( - '../components/Charts/publications/affiliations/dynamique-ouverture/chart-taux-ouverture' -)); -const ChartEvolutionProportionAffiliations = lazy(() => import( - '../components/Charts/publications/affiliations/dynamique-ouverture/chart-evolution-proportion' -)); -const ChartEvolutionTauxAffiliations = lazy(() => import( - '../components/Charts/publications/affiliations/dynamique-ouverture/chart-evolution-taux' -)); - // Essais cliniques + études observationnelles const ChartGroupesPatientsStudies = lazy(() => import( '../components/Charts/studies/caracteristiques/combien/chart-groupes-patients' @@ -260,9 +136,6 @@ const ChartSoftwareSharedAmongAllDiscipline = lazy(() => import( const ChartSoftwareSharedOa = lazy(() => import( '../components/Charts/software/oa/voies-ouverture/chart-software-shared' )); -const DatasetsWithImplicitMentionsOnly = lazy(() => import( - '../components/Charts/data/general/mentions/datasets-with-implicit-mentions-only' -)); // Orcid const OrcidEvolution = lazy(() => import('../components/Charts/orcid/general/chart-evolution')); @@ -308,83 +181,138 @@ const PublicationsBySource = lazy(() => import( )); const chartComponents = { - 'publi.affiliations.dynamique-ouverture.chart-taux-ouverture': - ChartTauxOuvertureAffiliations, - 'publi.affiliations.pays.chart-classement-pays': ChartClassementPays, - 'publi.affiliations.pays.chart-taux-rang-utile': - ChartEvolutionTauxOuvertureRangUtile, - 'publi.disciplines.dynamique-ouverture.chart-evolution-taux-ouverture': - ChartEvolutionTauxOuvertureDisciplines, - 'publi.disciplines.dynamique-ouverture.chart-taux-ouverture': - ChartTauxOuvertureDisciplines, + 'publi.affiliations.dynamique-ouverture.chart-taux-ouverture': lazy(() => import( + '../components/Charts/publications/affiliations/dynamique-ouverture/chart-taux-ouverture' + )), + 'publi.affiliations.pays.chart-classement-pays': lazy(() => import( + '../components/Charts/publications/affiliations/pays/chart-classement-pays' + )), + 'publi.affiliations.pays.chart-taux-rang-utile': lazy(() => import( + '../components/Charts/publications/affiliations/pays/chart-taux-rang-utile' + )), + 'publi.disciplines.dynamique-ouverture.chart-evolution-taux-ouverture': lazy( + () => import( + '../components/Charts/publications/disciplines/dynamique-ouverture/chart-evolution-taux-ouverture' + ), + ), + 'publi.disciplines.dynamique-ouverture.chart-taux-ouverture': lazy(() => import( + '../components/Charts/publications/disciplines/dynamique-ouverture/chart-taux-ouverture' + )), 'publi.disciplines.voies-ouverture.chart-evolution-comparaison-types-hebergement': - ChartEvolutionComparaisonTypesHebergementDisciplines, - 'publi.disciplines.voies-ouverture.chart-repartition-publications': - ChartRepartitionPublicationsDisciplines, - 'publi.general.dynamique-ouverture.chart-evolution-proportion': - ChartEvolutionProportion, - 'publi.repositories.dynamique-depot.chart-nombre-documents-depots': - ChartNombreDocumentsDepotsRepositories, - 'publi.repositories.dynamique-hal.chart-couverture-hal': - ChartTauxCouvertureHAL, - 'publi.repositories.dynamique-ouverture.chart-evolution-proportion': - ChartTauxPresenceRepositories, - 'publi.repositories.dynamique-ouverture.chart-taux-ouverture': - ChartTauxOuvertureArchives, - 'publi.repositories.plus-utilisees.chart-nombre-documents': - ChartNombreDocumentsRepositories, - 'publi.affiliations.dynamique-ouverture.chart-evolution-proportion': - ChartEvolutionProportionAffiliations, - 'publi.affiliations.dynamique-ouverture.chart-evolution-taux': - ChartEvolutionTauxAffiliations, - 'publi.general.voies-ouverture.chart-repartition-taux': ChartRepartitionTaux, - 'publi.general.voies-ouverture.chart-repartition-publications': - ChartRepartitionPublications, - 'publi.general.langues-ouverture.chart-repartition-publications': - ChartLanguesOuverture, - 'publi.general.langues.chart-publications-by-year': ChartLanguesByYear, - 'publi.general.impact-financement.chart-taux-ouverture': - ChartTauxOuvertureFinancement, - 'publi.general.impact-financement.chart-business-model': - ChartTauxOuvertureFinancementBusinessModel, - 'publi.general.impact-financement.chart-taux-ouverture-all-grants': - ChartTauxOuvertureFinancementAllGrants, - 'publi.general.impact-financement.chart-repartition-financements': - ChartRepartitionFinancements, - 'publi.general.impact-financement.chart-repartition-taux': - ChartRepartitionTauxFinancement, - 'publi.general.genres-ouverture.chart-repartition-genres': - ChartGenreOuverture, - 'publi.general.genres-ouverture.chart-evolution-proportion': - ChartGenreOuvertureEvolution, - 'publi.general.dynamique-ouverture.chart-taux-ouverture': ChartTauxOuverture, - 'publi.general.dynamique-ouverture.chart-taux-ouverture-article': - ChartTauxOuvertureArticle, - 'publi.publishers.type-ouverture.chart-repartition-modeles': - ChartRepartitionModelesPublishers, - 'publi.publishers.type-ouverture.chart-evolution-repartition': - ChartEvolutionRepartitionPublishers, - 'publi.publishers.repartition-licences.chart-repartition': - ChartRepartitionLicencesPublishers, - 'publi.publishers.repartition-licences.chart-classement': - ChartClassementLicencesPublishers, - 'publi.publishers.politiques-ouverture.chart-comparaison': - ChartComparaisonPublishers, - 'publi.publishers.politiques-ouverture.chart-classement': - ChartClassementPublishers, - 'publi.publishers.poids-revues.chart-repartition': ChartRepartitionPublishers, - 'publi.publishers.dynamique-ouverture.chart-taux-ouverture': - ChartTauxOuverturePublishers, - 'publi.publishers.dynamique-ouverture.chart-evolution-proportion': - ChartEvolutionProportionPublishers, - 'publi.publishers.dynamique-ouverture-journals.chart-taux-ouverture': - ChartTauxOuvertureJournals, - 'publi.publishers.couts-publication.chart-distribution-par-annee': - ChartDistributionParAnnee, - 'publi.publishers.couts-publication.chart-distribution': - ChartDistributionPublishers, - 'publi.publishers.couts-publication.chart-depenses-estimees': - ChartDepensesEstimeesPublishers, + lazy(() => import( + '../components/Charts/publications/disciplines/voies-ouverture/chart-evolution-comparaison-types-hebergement' + )), + 'publi.disciplines.voies-ouverture.chart-repartition-publications': lazy(() => import( + '../components/Charts/publications/disciplines/voies-ouverture/chart-repartition-publications' + )), + 'publi.general.dynamique-ouverture.chart-evolution-proportion': lazy(() => import( + '../components/Charts/publications/general/dynamique-ouverture/chart-evolution-proportion' + )), + 'publi.repositories.dynamique-depot.chart-nombre-documents-depots': lazy(() => import( + '../components/Charts/publications/archives/dynamique-depot/chart-nombre-documents-depots' + )), + 'publi.repositories.dynamique-hal.chart-couverture-hal': lazy(() => import( + '../components/Charts/publications/archives/dynamique-hal/chart-couverture-hal' + )), + 'publi.repositories.dynamique-ouverture.chart-evolution-proportion': lazy( + () => import( + '../components/Charts/publications/archives/dynamique-ouverture/chart-taux-presence' + ), + ), + 'publi.repositories.dynamique-ouverture.chart-taux-ouverture': lazy(() => import( + '../components/Charts/publications/archives/dynamique-ouverture/chart-taux-ouverture' + )), + 'publi.repositories.plus-utilisees.chart-nombre-documents': lazy(() => import( + '../components/Charts/publications/archives/plus-utilisees/chart-nombre-documents' + )), + 'publi.affiliations.dynamique-ouverture.chart-evolution-proportion': lazy( + () => import( + '../components/Charts/publications/affiliations/dynamique-ouverture/chart-evolution-proportion' + ), + ), + 'publi.affiliations.dynamique-ouverture.chart-evolution-taux': lazy(() => import( + '../components/Charts/publications/affiliations/dynamique-ouverture/chart-evolution-taux' + )), + 'publi.general.voies-ouverture.chart-repartition-taux': lazy(() => import( + '../components/Charts/publications/general/voies-ouverture/chart-repartition-taux' + )), + 'publi.general.voies-ouverture.chart-repartition-publications': lazy(() => import( + '../components/Charts/publications/general/voies-ouverture/chart-repartition-publications' + )), + 'publi.general.langues-ouverture.chart-repartition-publications': lazy(() => import( + '../components/Charts/publications/general/langues-ouverture/langues-ouverture' + )), + 'publi.general.langues.chart-publications-by-year': lazy(() => import( + '../components/Charts/publications/general/langues-evolution/langues-by-year' + )), + 'publi.general.impact-financement.chart-taux-ouverture': lazy(() => import( + '../components/Charts/publications/general/impact-financement/chart-taux-ouverture' + )), + 'publi.general.impact-financement.chart-business-model': lazy(() => import( + '../components/Charts/publications/general/impact-financement/chart-business-model' + )), + 'publi.general.impact-financement.chart-taux-ouverture-all-grants': lazy(() => import( + '../components/Charts/publications/general/impact-financement/chart-taux-ouverture-all-grants' + )), + 'publi.general.impact-financement.chart-repartition-financements': lazy(() => import( + '../components/Charts/publications/general/impact-financement/chart-repartition-financements' + )), + 'publi.general.impact-financement.chart-repartition-taux': lazy(() => import( + '../components/Charts/publications/general/impact-financement/chart-repartition-taux' + )), + 'publi.general.genres-ouverture.chart-repartition-genres': lazy(() => import( + '../components/Charts/publications/general/genres-ouverture/genres-ouverture' + )), + 'publi.general.genres-ouverture.chart-evolution-proportion': lazy(() => import( + '../components/Charts/publications/general/genres-ouverture/chart-evolution-proportion' + )), + 'publi.general.dynamique-ouverture.chart-taux-ouverture': lazy(() => import( + '../components/Charts/publications/general/dynamique-ouverture/chart-taux-ouverture' + )), + 'publi.general.dynamique-ouverture.chart-taux-ouverture-article': lazy(() => import( + '../components/Charts/publications/general/dynamique-ouverture/chart-taux-ouverture-article' + )), + 'publi.publishers.type-ouverture.chart-repartition-modeles': lazy(() => import( + '../components/Charts/publications/editeurs/type-ouverture/chart-repartition-modeles' + )), + 'publi.publishers.type-ouverture.chart-evolution-repartition': lazy(() => import( + '../components/Charts/publications/editeurs/type-ouverture/chart-evolution-repartition' + )), + 'publi.publishers.repartition-licences.chart-repartition': lazy(() => import( + '../components/Charts/publications/editeurs/repartition-licences/chart-repartition' + )), + 'publi.publishers.repartition-licences.chart-classement': lazy(() => import( + '../components/Charts/publications/editeurs/repartition-licences/chart-classement' + )), + 'publi.publishers.politiques-ouverture.chart-comparaison': lazy(() => import( + '../components/Charts/publications/editeurs/politiques-ouverture/chart-comparaison' + )), + 'publi.publishers.politiques-ouverture.chart-classement': lazy(() => import( + '../components/Charts/publications/editeurs/politiques-ouverture/chart-classement' + )), + 'publi.publishers.poids-revues.chart-repartition': lazy(() => import( + '../components/Charts/publications/editeurs/poids-revues/chart-repartition' + )), + 'publi.publishers.dynamique-ouverture.chart-taux-ouverture': lazy(() => import( + '../components/Charts/publications/editeurs/dynamique-ouverture/chart-taux-ouverture' + )), + 'publi.publishers.dynamique-ouverture.chart-evolution-proportion': lazy(() => import( + '../components/Charts/publications/editeurs/dynamique-ouverture/chart-evolution-proportion' + )), + 'publi.publishers.dynamique-ouverture-journals.chart-taux-ouverture': lazy( + () => import( + '../components/Charts/publications/editeurs/dynamique-ouverture-journals/chart-taux-ouverture' + ), + ), + 'publi.publishers.couts-publication.chart-distribution-par-annee': lazy(() => import( + '../components/Charts/publications/editeurs/couts-publication/chart-distribution-par-annee' + )), + 'publi.publishers.couts-publication.chart-distribution': lazy(() => import( + '../components/Charts/publications/editeurs/couts-publication/chart-distribution' + )), + 'publi.publishers.couts-publication.chart-depenses-estimees': lazy(() => import( + '../components/Charts/publications/editeurs/couts-publication/chart-depenses-estimees' + )), 'publi.others.collaborations.international-collaborations': ChartInterationalCollaborations, 'general.dynamique.chart-evolution': ChartEvolutionStudies, @@ -448,6 +376,11 @@ const chartComponents = { 'software.disciplines.voies-ouverture.chart-software-shared-among-all': ChartSoftwareSharedAmongAllDiscipline, 'software.oa.voies-ouverture.chart-software-shared': ChartSoftwareSharedOa, + 'software.general.mentions.software-with-at-least-one-explicit-mention': lazy( + () => import( + '../components/Charts/software/general/mentions/software-with-at-least-one-explicit-mention' + ), + ), // Data 'data.general.voies-ouverture.chart-data-used': ChartDataUsed, 'data.general.voies-ouverture.chart-data-created': ChartDataCreated, @@ -466,8 +399,11 @@ const chartComponents = { ChartDataAvailibilityDiscipline, 'data.editeurs.voies-ouverture.chart-availibility': ChartDataAvailibilityEditeur, - 'data.general.mentions.datasets-with-implicit-mentions-only': - DatasetsWithImplicitMentionsOnly, + 'data.general.mentions.datasets-with-at-least-one-explicit-mention': lazy( + () => import( + '../components/Charts/data/general/mentions/datasets-with-at-least-one-explicit-mention' + ), + ), // Orcid 'orcid.general.chart-evolution': OrcidEvolution, 'orcid.general.creation-by-year': OrcidCreationByYear, diff --git a/src/utils/chartFetchOptions.js b/src/utils/chartFetchOptions.js index 5e39a496..a9cf10aa 100644 --- a/src/utils/chartFetchOptions.js +++ b/src/utils/chartFetchOptions.js @@ -2489,7 +2489,7 @@ export default function getFetchOptions({ }, }, }), - datasetsWithImplicitMentionsOnly: ([ + datasetsWithAtLeastOneExplicitMention: ([ lastObservationSnap, minPublicationDate = 2013, ]) => ({ @@ -2533,6 +2533,50 @@ export default function getFetchOptions({ }, }, }), + codeWithAtLeastOneExplicitMention: ([ + lastObservationSnap, + minPublicationDate = 2013, + ]) => ({ + size: 0, + query: { + bool: { + filter: [ + { + range: { + year: { + gte: minPublicationDate, + lte: getPublicationYearFromObservationSnap( + lastObservationSnap, + ), + }, + }, + }, + { + range: { + 'softcite_details.nb_mentions': { + gt: 0, + }, + }, + }, + ], + }, + }, + aggs: { + by_publication_year: { + terms: { + field: 'year', + size: 10, + }, + aggs: { + is_implicit: { + terms: { + field: 'softcite_details.is_implicit_only', + }, + }, + }, + }, + }, + }), }; const queryResponse = allOptions[key](parameters) || {}; if (!queryResponse.query?.bool?.filter) { diff --git a/src/utils/chartOptions.js b/src/utils/chartOptions.js index 935f1d9b..664ec7d4 100644 --- a/src/utils/chartOptions.js +++ b/src/utils/chartOptions.js @@ -3266,7 +3266,7 @@ export const chartOptions = { return options; }, }, - 'data.general.mentions.datasets-with-implicit-mentions-only': { + 'data.general.mentions.datasets-with-at-least-one-explicit-mention': { getOptions: (id, intl, categories, data, dataTitle) => { const options = getGraphOptions({ id, intl, dataTitle }); options.chart.type = 'column'; @@ -3276,7 +3276,7 @@ export const chartOptions = { }; options.yAxis = getPercentageYAxis(); options.yAxis.title.text = intl.formatMessage({ - id: 'app.implicit-mentions-only', + id: 'app.with-at-least-one-explicit-mention', }); options.legend.enabled = false; options.plotOptions = { @@ -3322,7 +3322,7 @@ export const chartOptions = { return options; }, }, - 'software.general.voies-ouverture.chart-software-used': { + 'data.general.voies-ouverture.chart-data-used': { getOptions: (id, intl, categories, data, dataTitle) => { const options = getGraphOptions({ id, intl, dataTitle }); options.chart.type = 'column'; @@ -3332,7 +3332,7 @@ export const chartOptions = { }; options.yAxis = getPercentageYAxis(); options.yAxis.title.text = intl.formatMessage({ - id: 'app.used-software', + id: 'app.used-data', }); options.legend.enabled = false; options.plotOptions = { @@ -3346,12 +3346,12 @@ export const chartOptions = { }, }, }; - options.exporting.chartOptions.legend.enabled = false; options.series = data; + options.exporting.chartOptions.legend.enabled = false; return options; }, }, - 'software.general.voies-ouverture.chart-software-created': { + 'data.general.voies-ouverture.chart-availibility': { getOptions: (id, intl, categories, data, dataTitle) => { const options = getGraphOptions({ id, intl, dataTitle }); options.chart.type = 'column'; @@ -3361,7 +3361,7 @@ export const chartOptions = { }; options.yAxis = getPercentageYAxis(); options.yAxis.title.text = intl.formatMessage({ - id: 'app.created-software', + id: 'app.availibility', }); options.legend.enabled = false; options.plotOptions = { @@ -3380,7 +3380,7 @@ export const chartOptions = { return options; }, }, - 'software.general.voies-ouverture.chart-software-shared': { + 'data.general.voies-ouverture.chart-data-shared-among-all': { getOptions: (id, intl, categories, data, dataTitle) => { const options = getGraphOptions({ id, intl, dataTitle }); options.chart.type = 'column'; @@ -3388,9 +3388,9 @@ export const chartOptions = { categories, title: { text: intl.formatMessage({ id: 'app.publication-year' }) }, }; - options.yAxis = getPercentageYAxis(); + options.yAxis = getPercentageYAxis(true, null, false, 2); options.yAxis.title.text = intl.formatMessage({ - id: 'app.shared-software', + id: 'app.used-data', }); options.legend.enabled = false; options.plotOptions = { @@ -3409,21 +3409,22 @@ export const chartOptions = { return options; }, }, - 'software.general.voies-ouverture.chart-software-shared-among-all': { - getOptions: (id, intl, categories, data, dataTitle) => { + 'data.disciplines.voies-ouverture.chart-data-used': { + getOptions: (id, intl, categories, data, dataTitle, sortKey) => { const options = getGraphOptions({ id, intl, dataTitle }); - options.chart.type = 'column'; + options.chart.type = 'bar'; + options.chart.height = '700px'; options.xAxis = { categories, - title: { text: intl.formatMessage({ id: 'app.publication-year' }) }, }; - options.yAxis = getPercentageYAxis(true, null, false, 2); - options.yAxis.title.text = intl.formatMessage({ - id: 'app.shared-software', + options.yAxis = getPercentageYAxis(); + options.yAxis.title.text = intl.formatMessage({ id: 'app.used-data' }); + options.legend.title.text = intl.formatMessage({ + id: 'app.publi.type-hebergement', }); options.legend.enabled = false; options.plotOptions = { - column: { + series: { stacking: 'normal', dataLabels: { style: { @@ -3431,59 +3432,73 @@ export const chartOptions = { }, enabled: false, }, + dataSorting: { + enabled: true, + sortKey, + }, }, }; options.series = data; + options.exporting.csv = { + columnHeaderFormatter: (item) => (item.isXAxis ? 'field' : item.name), + }; options.exporting.chartOptions.legend.enabled = false; return options; }, }, - 'software.oa.voies-ouverture.chart-software-shared': { - getOptions: (id, intl, categories, data, dataTitle) => { + 'data.disciplines.voies-ouverture.chart-data-created': { + getOptions: (id, intl, categories, data, dataTitle, sortKey) => { const options = getGraphOptions({ id, intl, dataTitle }); options.chart.type = 'bar'; + options.chart.height = '700px'; options.xAxis = { categories, - title: { text: intl.formatMessage({ id: 'app.publication-year' }) }, }; options.yAxis = getPercentageYAxis(); - options.yAxis.title.text = intl.formatMessage({ - id: 'app.shared-software', - }); + options.yAxis.title.text = intl.formatMessage({ id: 'app.created-data' }); options.legend.title.text = intl.formatMessage({ id: 'app.publi.type-hebergement', }); - options.legend.reversed = true; + options.legend.enabled = false; options.plotOptions = { - column: { + series: { + stacking: 'normal', dataLabels: { style: { textOutline: 'none', }, enabled: false, }, + dataSorting: { + enabled: true, + sortKey, + }, }, }; options.series = data; + options.exporting.csv = { + columnHeaderFormatter: (item) => (item.isXAxis ? 'field' : item.name), + }; options.exporting.chartOptions.legend.enabled = false; return options; }, }, - 'data.general.voies-ouverture.chart-data-used': { - getOptions: (id, intl, categories, data, dataTitle) => { + 'data.disciplines.voies-ouverture.chart-data-shared': { + getOptions: (id, intl, categories, data, dataTitle, sortKey) => { const options = getGraphOptions({ id, intl, dataTitle }); - options.chart.type = 'column'; + options.chart.type = 'bar'; + options.chart.height = '700px'; options.xAxis = { categories, - title: { text: intl.formatMessage({ id: 'app.publication-year' }) }, }; options.yAxis = getPercentageYAxis(); - options.yAxis.title.text = intl.formatMessage({ - id: 'app.used-data', + options.yAxis.title.text = intl.formatMessage({ id: 'app.shared-data' }); + options.legend.title.text = intl.formatMessage({ + id: 'app.publi.type-hebergement', }); options.legend.enabled = false; options.plotOptions = { - column: { + series: { stacking: 'normal', dataLabels: { style: { @@ -3491,28 +3506,36 @@ export const chartOptions = { }, enabled: false, }, + dataSorting: { + enabled: true, + sortKey, + }, }, }; options.series = data; + options.exporting.csv = { + columnHeaderFormatter: (item) => (item.isXAxis ? 'field' : item.name), + }; options.exporting.chartOptions.legend.enabled = false; return options; }, }, - 'data.general.voies-ouverture.chart-availibility': { - getOptions: (id, intl, categories, data, dataTitle) => { + 'data.disciplines.voies-ouverture.chart-data-shared-among-all': { + getOptions: (id, intl, categories, data, dataTitle, sortKey) => { const options = getGraphOptions({ id, intl, dataTitle }); - options.chart.type = 'column'; + options.chart.type = 'bar'; + options.chart.height = '700px'; options.xAxis = { categories, - title: { text: intl.formatMessage({ id: 'app.publication-year' }) }, }; options.yAxis = getPercentageYAxis(); - options.yAxis.title.text = intl.formatMessage({ - id: 'app.availibility', + options.yAxis.title.text = intl.formatMessage({ id: 'app.shared-data' }); + options.legend.title.text = intl.formatMessage({ + id: 'app.publi.type-hebergement', }); options.legend.enabled = false; options.plotOptions = { - column: { + series: { stacking: 'normal', dataLabels: { style: { @@ -3520,28 +3543,36 @@ export const chartOptions = { }, enabled: false, }, + dataSorting: { + enabled: true, + sortKey, + }, }, }; options.series = data; + options.exporting.csv = { + columnHeaderFormatter: (item) => (item.isXAxis ? 'field' : item.name), + }; options.exporting.chartOptions.legend.enabled = false; return options; }, }, - 'data.general.voies-ouverture.chart-data-shared-among-all': { - getOptions: (id, intl, categories, data, dataTitle) => { + 'data.disciplines.voies-ouverture.chart-availibility': { + getOptions: (id, intl, categories, data, dataTitle, sortKey) => { const options = getGraphOptions({ id, intl, dataTitle }); - options.chart.type = 'column'; + options.chart.type = 'bar'; + options.chart.height = '700px'; options.xAxis = { categories, - title: { text: intl.formatMessage({ id: 'app.publication-year' }) }, }; - options.yAxis = getPercentageYAxis(true, null, false, 2); - options.yAxis.title.text = intl.formatMessage({ - id: 'app.used-data', + options.yAxis = getPercentageYAxis(); + options.yAxis.title.text = intl.formatMessage({ id: 'app.availibility' }); + options.legend.title.text = intl.formatMessage({ + id: 'app.publi.type-hebergement', }); options.legend.enabled = false; options.plotOptions = { - column: { + series: { stacking: 'normal', dataLabels: { style: { @@ -3549,28 +3580,30 @@ export const chartOptions = { }, enabled: false, }, + dataSorting: { + enabled: true, + sortKey, + }, }, }; options.series = data; + options.exporting.csv = { + columnHeaderFormatter: (item) => (item.isXAxis ? 'field' : item.name), + }; options.exporting.chartOptions.legend.enabled = false; return options; }, }, - 'software.disciplines.voies-ouverture.chart-software-used': { + 'data.editeurs.voies-ouverture.chart-availibility': { getOptions: (id, intl, categories, data, dataTitle, sortKey) => { const options = getGraphOptions({ id, intl, dataTitle }); options.chart.type = 'bar'; - options.chart.height = '700px'; + options.chart.height = '1000px'; options.xAxis = { categories, }; options.yAxis = getPercentageYAxis(); - options.yAxis.title.text = intl.formatMessage({ - id: 'app.used-software', - }); - options.legend.title.text = intl.formatMessage({ - id: 'app.publi.type-hebergement', - }); + options.yAxis.title.text = intl.formatMessage({ id: 'app.availibility' }); options.legend.enabled = false; options.plotOptions = { series: { @@ -3595,24 +3628,21 @@ export const chartOptions = { return options; }, }, - 'software.disciplines.voies-ouverture.chart-software-created': { - getOptions: (id, intl, categories, data, dataTitle, sortKey) => { + 'software.general.voies-ouverture.chart-software-used': { + getOptions: (id, intl, categories, data, dataTitle) => { const options = getGraphOptions({ id, intl, dataTitle }); - options.chart.type = 'bar'; - options.chart.height = '700px'; + options.chart.type = 'column'; options.xAxis = { categories, + title: { text: intl.formatMessage({ id: 'app.publication-year' }) }, }; options.yAxis = getPercentageYAxis(); options.yAxis.title.text = intl.formatMessage({ - id: 'app.created-software', - }); - options.legend.title.text = intl.formatMessage({ - id: 'app.publi.type-hebergement', + id: 'app.used-software', }); options.legend.enabled = false; options.plotOptions = { - series: { + column: { stacking: 'normal', dataLabels: { style: { @@ -3620,38 +3650,57 @@ export const chartOptions = { }, enabled: false, }, - dataSorting: { - enabled: true, - sortKey, - }, }, }; + options.exporting.chartOptions.legend.enabled = false; options.series = data; - options.exporting.csv = { - columnHeaderFormatter: (item) => (item.isXAxis ? 'field' : item.name), + return options; + }, + }, + 'software.general.voies-ouverture.chart-software-created': { + getOptions: (id, intl, categories, data, dataTitle) => { + const options = getGraphOptions({ id, intl, dataTitle }); + options.chart.type = 'column'; + options.xAxis = { + categories, + title: { text: intl.formatMessage({ id: 'app.publication-year' }) }, }; + options.yAxis = getPercentageYAxis(); + options.yAxis.title.text = intl.formatMessage({ + id: 'app.created-software', + }); + options.legend.enabled = false; + options.plotOptions = { + column: { + stacking: 'normal', + dataLabels: { + style: { + textOutline: 'none', + }, + enabled: false, + }, + }, + }; + options.series = data; options.exporting.chartOptions.legend.enabled = false; return options; }, }, - 'software.disciplines.voies-ouverture.chart-software-shared': { - getOptions: (id, intl, categories, data, dataTitle, sortKey) => { + 'software.general.voies-ouverture.chart-software-shared': { + getOptions: (id, intl, categories, data, dataTitle) => { const options = getGraphOptions({ id, intl, dataTitle }); - options.chart.type = 'bar'; - options.chart.height = '700px'; + options.chart.type = 'column'; options.xAxis = { categories, + title: { text: intl.formatMessage({ id: 'app.publication-year' }) }, }; options.yAxis = getPercentageYAxis(); options.yAxis.title.text = intl.formatMessage({ id: 'app.shared-software', }); - options.legend.title.text = intl.formatMessage({ - id: 'app.publi.type-hebergement', - }); options.legend.enabled = false; options.plotOptions = { - series: { + column: { stacking: 'normal', dataLabels: { style: { @@ -3659,38 +3708,28 @@ export const chartOptions = { }, enabled: false, }, - dataSorting: { - enabled: true, - sortKey, - }, }, }; options.series = data; - options.exporting.csv = { - columnHeaderFormatter: (item) => (item.isXAxis ? 'field' : item.name), - }; options.exporting.chartOptions.legend.enabled = false; return options; }, }, - 'software.disciplines.voies-ouverture.chart-software-shared-among-all': { - getOptions: (id, intl, categories, data, dataTitle, sortKey) => { + 'software.general.voies-ouverture.chart-software-shared-among-all': { + getOptions: (id, intl, categories, data, dataTitle) => { const options = getGraphOptions({ id, intl, dataTitle }); - options.chart.type = 'bar'; - options.chart.height = '700px'; + options.chart.type = 'column'; options.xAxis = { categories, + title: { text: intl.formatMessage({ id: 'app.publication-year' }) }, }; - options.yAxis = getPercentageYAxis(); + options.yAxis = getPercentageYAxis(true, null, false, 2); options.yAxis.title.text = intl.formatMessage({ id: 'app.shared-software', }); - options.legend.title.text = intl.formatMessage({ - id: 'app.publi.type-hebergement', - }); options.legend.enabled = false; options.plotOptions = { - series: { + column: { stacking: 'normal', dataLabels: { style: { @@ -3698,73 +3737,59 @@ export const chartOptions = { }, enabled: false, }, - dataSorting: { - enabled: true, - sortKey, - }, }, }; options.series = data; - options.exporting.csv = { - columnHeaderFormatter: (item) => (item.isXAxis ? 'field' : item.name), - }; options.exporting.chartOptions.legend.enabled = false; return options; }, }, - 'data.disciplines.voies-ouverture.chart-data-used': { - getOptions: (id, intl, categories, data, dataTitle, sortKey) => { + 'software.oa.voies-ouverture.chart-software-shared': { + getOptions: (id, intl, categories, data, dataTitle) => { const options = getGraphOptions({ id, intl, dataTitle }); options.chart.type = 'bar'; - options.chart.height = '700px'; options.xAxis = { categories, + title: { text: intl.formatMessage({ id: 'app.publication-year' }) }, }; options.yAxis = getPercentageYAxis(); - options.yAxis.title.text = intl.formatMessage({ id: 'app.used-data' }); + options.yAxis.title.text = intl.formatMessage({ + id: 'app.shared-software', + }); options.legend.title.text = intl.formatMessage({ id: 'app.publi.type-hebergement', }); - options.legend.enabled = false; + options.legend.reversed = true; options.plotOptions = { - series: { - stacking: 'normal', + column: { dataLabels: { style: { textOutline: 'none', }, enabled: false, }, - dataSorting: { - enabled: true, - sortKey, - }, }, }; options.series = data; - options.exporting.csv = { - columnHeaderFormatter: (item) => (item.isXAxis ? 'field' : item.name), - }; options.exporting.chartOptions.legend.enabled = false; return options; }, }, - 'data.disciplines.voies-ouverture.chart-data-created': { - getOptions: (id, intl, categories, data, dataTitle, sortKey) => { + 'software.general.mentions.software-with-at-least-one-explicit-mention': { + getOptions: (id, intl, categories, data, dataTitle) => { const options = getGraphOptions({ id, intl, dataTitle }); - options.chart.type = 'bar'; - options.chart.height = '700px'; + options.chart.type = 'column'; options.xAxis = { categories, + title: { text: intl.formatMessage({ id: 'app.publication-year' }) }, }; options.yAxis = getPercentageYAxis(); - options.yAxis.title.text = intl.formatMessage({ id: 'app.created-data' }); - options.legend.title.text = intl.formatMessage({ - id: 'app.publi.type-hebergement', + options.yAxis.title.text = intl.formatMessage({ + id: 'app.with-at-least-one-explicit-mention', }); options.legend.enabled = false; options.plotOptions = { - series: { + column: { stacking: 'normal', dataLabels: { style: { @@ -3772,21 +3797,14 @@ export const chartOptions = { }, enabled: false, }, - dataSorting: { - enabled: true, - sortKey, - }, }, }; options.series = data; - options.exporting.csv = { - columnHeaderFormatter: (item) => (item.isXAxis ? 'field' : item.name), - }; options.exporting.chartOptions.legend.enabled = false; return options; }, }, - 'data.disciplines.voies-ouverture.chart-data-shared': { + 'software.disciplines.voies-ouverture.chart-software-used': { getOptions: (id, intl, categories, data, dataTitle, sortKey) => { const options = getGraphOptions({ id, intl, dataTitle }); options.chart.type = 'bar'; @@ -3795,7 +3813,9 @@ export const chartOptions = { categories, }; options.yAxis = getPercentageYAxis(); - options.yAxis.title.text = intl.formatMessage({ id: 'app.shared-data' }); + options.yAxis.title.text = intl.formatMessage({ + id: 'app.used-software', + }); options.legend.title.text = intl.formatMessage({ id: 'app.publi.type-hebergement', }); @@ -3823,7 +3843,7 @@ export const chartOptions = { return options; }, }, - 'data.disciplines.voies-ouverture.chart-data-shared-among-all': { + 'software.disciplines.voies-ouverture.chart-software-created': { getOptions: (id, intl, categories, data, dataTitle, sortKey) => { const options = getGraphOptions({ id, intl, dataTitle }); options.chart.type = 'bar'; @@ -3832,7 +3852,9 @@ export const chartOptions = { categories, }; options.yAxis = getPercentageYAxis(); - options.yAxis.title.text = intl.formatMessage({ id: 'app.shared-data' }); + options.yAxis.title.text = intl.formatMessage({ + id: 'app.created-software', + }); options.legend.title.text = intl.formatMessage({ id: 'app.publi.type-hebergement', }); @@ -3860,7 +3882,7 @@ export const chartOptions = { return options; }, }, - 'data.disciplines.voies-ouverture.chart-availibility': { + 'software.disciplines.voies-ouverture.chart-software-shared': { getOptions: (id, intl, categories, data, dataTitle, sortKey) => { const options = getGraphOptions({ id, intl, dataTitle }); options.chart.type = 'bar'; @@ -3869,7 +3891,9 @@ export const chartOptions = { categories, }; options.yAxis = getPercentageYAxis(); - options.yAxis.title.text = intl.formatMessage({ id: 'app.availibility' }); + options.yAxis.title.text = intl.formatMessage({ + id: 'app.shared-software', + }); options.legend.title.text = intl.formatMessage({ id: 'app.publi.type-hebergement', }); @@ -3897,16 +3921,21 @@ export const chartOptions = { return options; }, }, - 'data.editeurs.voies-ouverture.chart-availibility': { + 'software.disciplines.voies-ouverture.chart-software-shared-among-all': { getOptions: (id, intl, categories, data, dataTitle, sortKey) => { const options = getGraphOptions({ id, intl, dataTitle }); options.chart.type = 'bar'; - options.chart.height = '1000px'; + options.chart.height = '700px'; options.xAxis = { categories, }; options.yAxis = getPercentageYAxis(); - options.yAxis.title.text = intl.formatMessage({ id: 'app.availibility' }); + options.yAxis.title.text = intl.formatMessage({ + id: 'app.shared-software', + }); + options.legend.title.text = intl.formatMessage({ + id: 'app.publi.type-hebergement', + }); options.legend.enabled = false; options.plotOptions = { series: {