Lantz McGinnis-Brown
  • About
  • Research
  • Teaching & Training
  • Blog
  • CV
Idaho Nonprofit Dashboard
  • Map & Overview
  • Activities & Classifications
  • Organizational Exemption Years
  • Affiliation & Organization Type
  • Assets, Income, & Revenue
  • Tables
L = {
  const L = await require("leaflet/dist/leaflet.js");
  if (!L._style) {
    const href = await require.resolve("leaflet/dist/leaflet.css");
    document.head.appendChild(L._style = html`<link href=${href} rel=stylesheet>`);
  }

  return L;
};
data = transpose(raw_data);
class_data = transpose(raw_class_data);
map_data = transpose(raw_map_data);
summary_data = transpose(raw_sum_data);
class_sum = transpose(sum_class_data);
year_counts = transpose(year_count_data);
affiliations = transpose(raw_affiliations);
org_type = transpose(raw_org_type);
assets = transpose(raw_assets);
income = transpose(raw_income); 
finances = transpose(raw_finances);

filterOptions = [...new Set(data.map(d => d.NTEE_Core_Description))];

filteredData = {
  if (selectedGroup === "" || selectedGroup === "all") {
    return data;
  } else {
    return data.filter(d => d.NTEE_Core_Description === selectedGroup);
  }
}

filteredAffiliations = {
  if (selectedGroup === "" || selectedGroup === "all") {
    return affiliations;
  } else {
    return affiliations.filter(d => d.NTEE_Core_Description === selectedGroup);
  }
}

filteredOrgType = {
  if (selectedGroup === "" || selectedGroup === "all") {
    return org_type;
  } else {
    return org_type.filter(d => d.NTEE_Core_Description === selectedGroup);
  }
}

filteredAssets = {
  if (selectedGroup === "" || selectedGroup === "all") {
    return assets;
  } else {
    return assets.filter(d => d.NTEE_Core_Description === selectedGroup);
  }
}

filteredIncome = {
  if (selectedGroup === "" || selectedGroup === "all") {
    return income;
  } else {
    return income.filter(d => d.NTEE_Core_Description === selectedGroup);
  }
}

filteredFinances = {
  if (selectedGroup === "" || selectedGroup === "all") {
    return finances;
  } else {
    return finances.filter(d => d.NTEE_Core_Description === selectedGroup);
  }
}

filteredClassData = {
 if (selectedGroup === "" || selectedGroup === "all") {
    return class_data;
  } else {
    return class_data.filter(d => d.NTEE_Core_Description === selectedGroup);
  }
}

filteredYearCounts = {
if (selectedGroup === "" || selectedGroup == "all"){
  return year_counts
      //.filter(d => d.Ruling_Year >= 1900)
      .filter(d => d.Ruling_Year < 2025);
} else {
    return year_counts
    .filter(d => d.NTEE_Core_Description === selectedGroup)
    //.filter(d => d.Ruling_Year >= 1900)
    .filter(d => d.Ruling_Year < 2025);
}
}
data = Array(920) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, …]
class_data = Array(346) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, …]
map_data = Array(9057) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, …]
summary_data = Array(26) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, …]
class_sum = Array(24) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, …]
year_counts = Array(1403) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, …]
affiliations = Array(86) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, …]
org_type = Array(93) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, …]
assets = Array(245) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, …]
income = Array(231) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, …]
finances = Array(214) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, …]
filterOptions = Array(27) ["Animal-Related", "Arts, Culture and Humanities", "Civil Rights, Social Action & Advocacy", "Community Improvement & Capacity Building", "Crime & Legal-Related", "Education", "Employment", "Environment", "Food, Agriculture and Nutrition", "Health Care", "Housing & Shelter", "Human Services", "International, Foreign Affairs and National Security", "Medical Research", "Mental Health & Crisis Intervention", "Mutual & Membership Benefit", "Philanthropy, Voluntarism and Grantmaking Foundations", "Public & Societal Benefit", "Public Safety, Disaster Preparedness and Relief", "Recreation & Sports", …]
filteredData = Array(314) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, …]
filteredAffiliations = Array(8) [Object, Object, Object, Object, Object, Object, Object, Object]
filteredOrgType = Array(6) [Object, Object, Object, Object, Object, Object]
filteredAssets = Array(10) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object]
filteredIncome = Array(10) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object]
filteredFinances = Array(10) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object]
filteredClassData = Array(34) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, …]
filteredYearCounts = Array(98) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, …]
html`<label for="ntee-select">Choose an NTEE Activity Filter:</label>`
viewof selectedGroup = html`<select id="ntee-select">
  <option value="All">All</option>
  ${filterOptions.map(option => `<option value="${option}">${option}</option>`)}
</select>
`
html`
<em style = "font-size: 20px;">Choose an NTEE activity from the dropdown menu to filter results by that activity.</em>
`
selectedGroup = "All"
Choose an NTEE activity from the dropdown menu to filter results by that activity.
Idaho Nonprofit Map
container = {

  let x = d3.create("div")
  
  x.attr("style", `width:100%;height:${window.outerHeight * 0.69}px`);

  return x.node();

};

map = L.map(container, {zoomSnap: 0.25});

tilelayer = L.tileLayer('https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}', {
    attribution: 'Tiles courtesy of the <a href="https://usgs.gov/">U.S. Geological Survey</a>', maxZoom: 20
    }).addTo(map);
  
markerLayerGroup = L.layerGroup().addTo(map); 

markerIcon = L.icon({
  iconUrl: `https://raw.githubusercontent.com/primer/octicons/ede8e1acef3c7c036799af286f1ee2d755f04225/icons/info-24.svg`,
  iconSize: [31, 46],
  popupAnchor: [0, -10]
});

//setTimeout(() => {
reactiveMapUpdate = { 
 markerLayerGroup.clearLayers(); 

  const filteredLocations = selectedGroup === "" || selectedGroup === "All"
    ? map_data
    : map_data.filter(d => d.NTEE_Core_Description === selectedGroup);
    
  const defaultMarker = L.icon({
    iconUrl: 'https://unpkg.com/leaflet@1.9.4/dist/images/marker-icon.png',
    shadowUrl: 'https://unpkg.com/leaflet@1.9.4/dist/images/marker-shadow.png',
    iconAnchor:   [12, 41],
    shadowAnchor: [4, 62],
    popupAnchor:  [-3, -76]
  });

  filteredLocations.forEach(location => {
    L.marker([location.lat, location.long], {icon: defaultMarker})
      .bindTooltip(`<b>${location.NAME}</b><br>In Care of: ${location.ICO}<br>NTEE Code: ${location.NTEE_Core_Description}<br><em>Full NTEE Description: ${location.NTEE_Full_Description}</em>`)
      .addTo(markerLayerGroup); // Add markers to the layer group
  });
    
  map.setView([44.8582, -113.7420], 6.25);
  
  setTimeout(() => {
    L.marker([47.9, -109.9], {icon: markerIcon}).addTo(map)
    .bindPopup('All data in this dashboard comes from<br>Idaho IRS 990 Extract Data')
    .openPopup();
}, 50);
  
  return undefined;
};
Expand
The Idaho Nonprofit Environment(Click a Parent Category to Zoom In)EducationReligion-RelatedRecreation & SportsArts, Culture andHumanitiesHuman ServicesCommunityImprovement &Capacity BuildingPhilanthropy,Voluntarismand GrantmakingFoundationsPublic & SocietalBenefitMutual & MembershipBenefitHealth CareYouth DevelopmentAnimal-RelatedFood, Agricultureand NutritionEnvironmentMental Health &Crisis InterventionInternational,Foreign Affairs andNational SecurityEmploymentHousing & ShelterPublic Safety,DisasterPreparedness andReliefUnknownCrime &Legal-RelatedCivil Rights, SocialAction & AdvocacyVoluntary HealthAssociations &Medical DisciplinesMedical ResearchScience & TechnologySocial ScienceStudent Services, Organizations of StudentsStudent Sororities, FraternitiesParent/Teacher GroupScholarships, Student Financial Aid Services, AwardsUnreportedElementary, Secondary Education, K - 12Educational Services and Schools - OtherEducation N.E.C.Single Organization SupportFund Raising and/or Fund DistributionLibrariesAlliance/Advocacy OrganizationsProfessional Societies, AssociationsAdult, Continuing EducationVocational, Technical SchoolsPrimary, Elementary SchoolsSpecialized Education InstitutionsKindergarten, Preschool, Nursery School, Early Adm.Alumni AssociationsSecondary, High SchoolRemedial Reading, Reading EncouragementNonmonetary Support N.E.C.Higher Education InstitutionsManagement & Technical AssistanceResearch Institutes and/or Public Policy AnalysisUndergraduate College (4-year)Arts, Cultural Organizations - MultipurposeBirth Defects, Genetic Diseases ResearchGraduate, Professional Schools (Separate Entities)Amateur SportsGift DistributionPrinting, PublishingScoutingSports Associations &Training FacilitiesChristianityProtestantReligion Related N.E.C.BuddhismFund Raising and Fund DistributionRoman CatholicUnreportedProfessional Societies & AssociationsSingle Organization SupportAlliance/AdvocacyReligious Media, CommunicationsInterfaith CoalitionsReligious Printing, PublishingReligious RadioIslamScoutingJudaismHinduismCampsReligious Film, VideoSupport N.E.C.Amateur SportsCampsRecreational l ClubsBaseball, SoftballAmateur Sports CompetitionsRecreation& Sports N.E.C.Fund Raising and Fund DistributionWinter SportsSoccerFootballPhysical Fitness and Community Recreational FacilitiesSports Associations &Training FacilitiesFishing, HuntingSwimming & Other Water RecreationCommunity Recreational CentersEquestrianParks and PlaygroundsFairsBasketballGolfSingle Organization SupportAlliance/AdvocacyRacquet SportsYouth Centers, ClubsUnreportedScoutingStudent Services, Organizations of StudentsCenters to Support Independence of Specific PopulationsDelinquency PreventionProfessional Societies, AssociationsScholarships, Student Financial Aid Services, AwardsSupport N.E.C.Arts, Cultural Organizations - MultipurposeHistorical Societies, Related Historical ActivitiesMuseum, Museum ActivitiesMusicTheaterCultural, Ethnic AwarenessCommemorative EventsPerforming Arts OrganizationsHistory MuseumsDanceArts EducationSinging, ChoralFund Raising and/or Fund DistributionArts, Culture, and Humanities N.E.C.UnreportedMusic Groups, Bands, EnsemblesRadioHistorical Societies & Historic PreservationScoutingSingle Organization SupportVisual Arts OrganizationsFilm, VideoHumanities OrganizationsMedia, Communications OrganizationsPerforming Arts CentersProfessional Societies, AssociationsSymphony OrchestrasPrinting, PublishingArts Council/AgencyBalletAlliance/Advocacy OrganizationsArts Service Organizations and ActivitiesChildren's MuseumsCommunity CelebrationsPerforming Arts SchoolsScience and Technology MuseumsFairsNatural History, Natural Science MuseumsReligious Printing, PublishingGift DistributionLand Resources ConservationMilitary, Veterans' OrganizationsNonmonetary Support N.E.C.*OperaStudent Services, Organizations of StudentsTelevisionHuman Service OrganizationsHuman Services N.E.C.Centers to Support Independence of Specific PopulationsFamily ServicesUnreportedEmergency AssistanceFund Raising and Fund DistributionGift DistributionPersonal Social ServicesChildren's, Youth ServicesAlliance/AdvocacyChild Day CareSenior CentersVictims' ServicesFoster CareResidential Care & Adult Day ProgramsThrift ShopsHomeless CentersFinancial CounselingAdoptionDevelopmentally Disabled CentersFood ProgramsHospicesStudent Services, Organizations of StudentsFamily CounselingFamily Services for Adolescent ParentsLGBT CentersCommunity Service ClubsEthnic, Immigrant CentersFamily Violence SheltersManagement & Technical AssistanceSingle Organization SupportArts, Cultural Organizations - MultipurposeBlind/Visually Impaired CentersCommunity, Neighborhood DevelopmentDeaf/Hearing Impaired CentersHospitals and Related Primary Medical Care FacilitiesNeighborhood CentersProfessional Societies, AssociationsScoutingSingle Parent AgenciesSpecialized Education InstitutionsSupport N.E.C.Transportation AssistanceBirth Defects, Genetic Diseases ResearchChristianityCommunity Recreational CentersDelinquency PreventionElementary, Secondary Education, K - 12Housing Development, Construction, ManagementHousing Search AssistanceIn-Home AssistanceKindergarten, Preschool, Nursery School, Early Adm.Nonmonetary Support N.E.C.Nursing, Convalescent FacilitiesPregnancy CentersSenior Citizens' Housing/Retirement CommunitiesYoung Men's or Women's AssociationsChambers of Commerce & Business LeaguesCommunity, Neighborhood DevelopmentCommunity Service ClubsEconomic DevelopmentBusiness and IndustryCommunity Improvement, Capacity Building N.E.C.Real Estate AssociationsRural Economic DevelopmentBoards of TradeUrban, Community Economic DevelopmentCommunity CoalitionsFund Raising and Fund DistributionNeighborhood, Block AssociationsAlliance/AdvocacySingle Organization SupportWomen's Service ClubsUnreportedMen's Service ClubsSmall Business DevelopmentManagement & Technical AssistanceProfessional Societies, AssociationsArts, Cultural Organizations - MultipurposeThe Idaho Nonprofit Environment(Click a Parent Category to Zoom In) ManagementScoutingSports Associations &Training FacilitiesSupport N.E.C.Private Grantmaking FoundationsPrivate Independent FoundationsPublic FoundationsPhilanthropy, Charity, Voluntarism PromotionUnreportedFund Raising and Fund DistributionFederated Giving ProgramsCommunity FoundationsPhilanthropy, Voluntarism, and Grantmaking FdnsCorporate FoundationsPrivate Operating FoundationsSingle Organization SupportNamed Trusts N.E.C.Voluntarism PromotionManagement & Technical AssistanceAlliance/AdvocacyProfessional Societies, AssociationsScoutingAnimal Protection and WelfareChristianityResearch Institutes and Public Policy AnalysisSupport N.E.C.Military, Veterans' OrganizationsTelecommunicationsPublic, Society Benefit N.E.C.Fund Raising and Fund DistributionPublic UtilitiesAlliance/AdvocacyCitizen ParticipationConsumer ProtectionCredit UnionsGovernment and Public AdministrationResearch Institutes and Public Policy AnalysisUnreportedFinancial InstitutionsManagement & Technical AssistanceProfessional Societies, AssociationsSingle Organization SupportLeadership DevelopmentPublic Finance, Taxation, Monetary PolicyPublic Transportation SystemsStudent Services, Organizations of StudentsSupport N.E.C.Insurance ProvidersLocal Benevolent Life Insurance AssociationsFraternal SocietiesCemeteriesDomestic Fraternal SocietiesPension and Retirement FundsMutual/Membership Benefit N.E.C.Fund Raising and Fund DistributionSingle Organization SupportFraternal Beneficiary SocietiesProfessional Societies, AssociationsVol. Employees Beneficiary Assoc. (Non-Government)Vol. Employees Beneficiary Assoc. (Government)Alliance/AdvocacyMutual Insurance Company & AssociationsUnreportedPublic Health ProgramAmbulance, Emergency Medical Transport ServicesHospitals and Related Primary Medical Care FacilitiesHealth Support ServicesPatient Services - Entertainment, RecreationFund Raising and/or Fund DistributionUnreportedSingle Organization SupportAmbulatory Health Center, Community ClinicProfessional Societies, AssociationsHealth - General and Rehabilitative N.E.C.Health Treatment Facilities, Primarily OutpatientAlliance/Advocacy OrganizationsHealth, General and FinancingReproductive Health Care Facilities and Allied ServicesCommunity Health SystemsNonmonetary Support N.E.C.Rehabilitative Medical ServicesChristianityFamily Planning CentersGroup Health Practice (HMOs)Hospital, GeneralNursing, Convalescent FacilitiesCenters to Support Independence of Specific PopulationsArts, Cultural Organizations - MultipurposeManagement & Technical AssistanceResearch Institutes and/or Public Policy AnalysisScoutingSpecialized Education InstitutionsStudent Services, Organizations of StudentsYouth Development ProgramsScoutingYouth Centers, ClubsFund Raising and Fund DistributionYouth Development - AgriculturalYouth Development N.E.C.Student Services, Organizations of StudentsBoys and Girls ClubsSingle Organization SupportYouth Community Service ClubsYouth Development - BusinessAlliance/AdvocacyGirls ClubsUnreportedYouth Development – Religious LeadershipBoy Scouts of AmericaCenters to Support Independence of Specific PopulationsElementary, Secondary Education, K - 12Private Grantmaking FoundationsScholarships, Student Financial Aid Services, AwardsSports Associations &Training FacilitiesSupport N.E.C.Youth Development – CitizenshipAnimal Protection and WelfareAnimal-Related N.E.C.Wildlife Preservation, ProtectionOther Services - Specialty AnimalsFund Raising and/or Fund DistributionUnreportedSingle Organization SupportAnimal Training, BehaviorAlliance/Advocacy OrganizationsProfessional Societies, AssociationsWildlife Sanctuary, RefugeZoo, Zoological SocietyFisheries ResourcesNatural Resources Conservation and ProtectionProtection of Endangered SpeciesScoutingVeterinary ServicesCommunity Service ClubsManagement & Technical AssistanceNonmonetary Support N.E.C.Pollution Abatement and Control ServicesResearch Institutes and/or Public Policy AnalysisStudent Services, Organizations of StudentsAgricultural ProgramsFood Banks, PantriesFood ProgramsFarm Bureau, GrangeFood, Agriculture, and Nutrition N.E.C.NutritionAnimal HusbandryFund Raising and Fund DistributionUnreportedCongregate MealsScoutingAlliance/AdvocacyCenters to Support Independence of Specific PopulationsFarmland PreservationMeals on WheelsResearch Institutes and Public Policy AnalysisSupport N.E.C.Fruit and Vegetable MarketsProfessional Societies & AssociationsSingle Organization SupportNatural Resources Conservation and ProtectionLand Resources ConservationWater Resource, Wetlands Conservation and MgmtEnvironmental Education and Outdoor Survival ProgramsGarden Club, Horticultural ProgramUnreportedEnvironmental Quality, Protection, and BeautificationAlliance/Advocacy OrganizationsPollution Abatement and Control ServicesEnergy Resources Conservation and DevelopmentEnvironmental Beautification and AestheticsForest ConservationScoutingSingle Organization SupportRecycling ProgramsBotanical, Horticultural, and Landscape ServicesProfessional Societies, AssociationsManagement & Technical AssistanceBirth Defects, Genetic Diseases ResearchBotanical Gardens, Arboreta and Botanical OrgsFund Raising and/or Fund DistributionMuseum, Museum ActivitiesNonmonetary Support N.E.C.Research Institutes and/or Public Policy AnalysisStudent Services, Organizations of StudentsCounseling, Support GroupsAlcohol, Drug Abuse, Prevention & TreatmentPsychiatric, Mental Health HospitalAlcohol, Drug Abuse, Prevention OnlyAlliance/Advocacy OrganizationsFund Raising and/or Fund DistributionMental Health, Crisis Intervention N.E.C.Mental Health AssociationAlcohol, Drug Abuse, Treatment OnlyMental Health DisordersCommunity Mental Health CenterHot Line, Crisis Intervention ServicesProfessional Societies, AssociationsSingle Organization SupportHospitals and Related Primary Medical Care FacilitiesNonmonetary Support N.E.C.Residential Mental Health TreatmentUnreportedAgricultural ProgramsAmbulance, Emergency Medical Transport ServicesBirth Defects, Genetic Diseases ResearchCommunity, Neighborhood DevelopmentRape Victim ServicesResearch Institutes and/or Public Policy AnalysisInternational ReliefAlliance/Advocacy OrganizationsInternational DevelopmentPromotion of International UnderstandingFund Raising and Fund DistributionInternational Human RightsInternational Migration, Refugee IssuesInternational Economic DevelopmentInternational, Foreign Affairs, and National SecurityUnreportedArts, Cultural Organizations - MultipurposeChristianityInternational Agricultural DevelopmentInternational Exchange, N.E.C.International Peace and SecurityManagement & Technical AssistanceSingle Organization SupportLabor UnionsEmployment Procurement AssistanceJob TrainingProfessional Societies, AssociationsUnreportedEmployment N.E.C.Single Organization SupportAlliance/Advocacy OrganizationsCenters to Support Independence of Specific PopulationsDelinquency PreventionFund Raising and Fund DistributionGoodwill IndustriesGovernment and Public AdministrationManagement & Technical AssistanceSpecialized Education InstitutionsVocational CounselingVocational RehabilitationHousing Development, Construction, ManagementLow-Income & Subsidized Rental HousingSenior Citizens' Housing/Retirement CommunitiesHomeowners & Tenants AssociationsHomeless SheltersHousing, Shelter N.E.C.Housing Search AssistanceHousing SupportTemporary HousingUnreportedHome Improvement and RepairsHousing Expense Reduction SupportChristianityHousing RehabilitationNursing, Convalescent FacilitiesSingle Organization SupportAlliance/Advocacy OrganizationsCommunity, Neighborhood DevelopmentScoutingSupport N.E.C.Fire PreventionSearch and Rescue SquadsDisaster Preparedness and Relief ServicesFund Raising and Fund DistributionSafety EducationPublic Safety, Disaster Preparedness, & ReliefProfessional Societies, AssociationsAutomotive SafetySingle Organization SupportAlliance/AdvocacyFirst AidPublic Safety Benevolent AssociationsSupport N.E.C.Ambulance, Emergency Medical Transport ServicesManagement & Technical AssistanceStudent Services, Organizations of StudentsUnreportedUnreportedScoutingUnknownArts, Cultural Organizations - MultipurposeChristianityAlliance/Advocacy OrganizationsFood ProgramsNatural Resources Conservation and ProtectionSports Associations &Training FacilitiesLaw EnforcementDelinquency PreventionChild Abuse, PreventionProtection Against AbuseLegal ServicesSexual Abuse, PreventionCrime PreventionFund Raising and Fund DistributionHalf-Way House for Offenders, Ex-OffendersInmate SupportProfessional Societies, AssociationsAlliance/AdvocacyCrime, Legal Related N.E.C.Rehabilitation Services for OffendersSupport N.E.C.Single Organization SupportChambers of Commerce & Business LeaguesCommunity Service ClubsCommunity, Neighborhood DevelopmentDispute Resolution, Mediation ServicesDrunk Driving RelatedResearch Institutes and Public Policy AnalysisSpouse Abuse, PreventionUnreportedCivil Rights, Social Action, Advocacy N.E.C.Civil RightsLesbian, Gay RightsVoter Education, RegistrationAlliance/AdvocacyCivil LibertiesDisabled Persons' RightsIntergroup, Race RelationsWomen's RightsFund Raising and Fund DistributionReproductive RightsResearch Institutes and Public Policy AnalysisRight to LifeUnreportedCensorship, Freedom of Speech and PressChild Abuse, PreventionManagement & Technical AssistanceProfessional Societies, AssociationsSeniors' RightsSingle Organization SupportStudent Services, Organizations of StudentsCancerFund Raising and/or Fund DistributionAutismBirth Defects and Genetic DiseasesMedical DisciplinesSpecifically Named DiseasesUnreportedAIDSAlliance/Advocacy OrganizationsBrain DisordersEar and Throat DiseasesEye Diseases, Blindness and Vision ImpairmentsVoluntary HealthAssociations &Medical DisciplinesAlzheimer's DiseaseArthritisCenters to Support Independence of Specific PopulationsDiseases of Specific OrgansDown SyndromeElementary, Secondary Education, K - 12EpilepsyHeart and Circulatory System Diseases, DisordersNerve, Muscle and Bone DiseasesPediatricsSurgery SpecialtiesBirth Defects, Genetic Diseases ResearchFund Raising and/or Fund DistributionUnreportedCancer ResearchHeart, Circulatory ResearchMedical Research N.E.C.Alliance/Advocacy OrganizationsArthritis ResearchMedical Disciplines ResearchNeurology, Neuroscience ResearchPediatrics ResearchProfessional Societies, AssociationsResearch Institutes and/or Public Policy AnalysisStudent Services, Organizations of StudentsProfessional Societies, AssociationsEngineering and TechnologyGeneral ScienceGeologyScience and Technology N.E.C.Biological & Life SciencesAstronomyComputer ScienceUnreportedFund Raising and Fund DistributionManagement & Technical AssistancePhysical & Earth Sciences,Research Institutes and Public Policy AnalysisSingle Organization SupportBehavioral ScienceBirth Defects, Genetic Diseases ResearchEconomicsLabor StudiesLaw, JurisprudenceManagement & Technical AssistanceResearch Institutes and Public Policy AnalysisUnreported
plotly-logomark
Expand
  • Nonprofits by Activity
  • Nonprofits by Sub-Activity (Filtered)
  • Assets
  • Assets by Sub-Activity (Filtered)
{

summary_data.sort((a,b) => b.Count - a.Count);

const initialWidth = 600; // Initial width for viewBox
const initialHeight = 500; // Initial height for viewBox

const margin = {top: 25, right: 30, bottom: 40, left: 300};
//const width = 1000 - margin.left - margin.right;
//const height = 500 - margin.top - margin.bottom;

var svg = d3.create("svg")
    .attr("viewBox", [0, 0, initialWidth, initialHeight]) // Set the viewBox
    .attr("width", "100%") // Make it responsive width-wise
    .attr("height", "100%"); // Make it responsive height-wise
    //.attr("width", width + margin.left + margin.right)
    //.attr("height", height + margin.top + margin.bottom);

var x = d3.scaleLinear()
  .domain([0, d3.max(summary_data, d => d.Count)])
  .range([0, initialWidth - margin.left - margin.right]);

var y = d3.scaleBand()
  .range([0, initialHeight - margin.top - margin.bottom])
  .domain(summary_data.map(d => d.NTEE_Core_Description))
  .padding(0.1);

var plotGroup = svg.append("g")
  .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

// Corrected x-axis placement
plotGroup.append("g")
  .attr("class", "xAxis")
  .attr("transform", `translate(0,${initialHeight - margin.top - margin.bottom})`) // Place at the bottom
  .call(d3.axisBottom(x));

plotGroup.append("g")
  .attr("class", "yAxis")
  .call(d3.axisLeft(y))
  .selectAll("text")
  .style("text-anchor", "end");

const bars = plotGroup.selectAll("rect")
  .data(summary_data)
  .join(
  enter => enter.append("rect")
  .attr("x", x(0)+1)
  .attr("y", initialHeight)
  .attr("width", function(d) { return x(d.Count); })
  .attr("height", 0) // Corrected height calculation
  .attr("fill", "#69B3A2")
  .call(enter => enter.transition()
    .duration(500)
    .attr("y", function(d) { return y(d.NTEE_Core_Description); })
    .attr("height", y.bandwidth())),
  update => update
    .call(update => update.transition()
      .duration(500)
      .attr("x", x(0)+1)
      .attr("y", function(d) { return y(d.NTEE_Core_Description); })
      .attr("width", function(d) { return x(d.Count); })
      .attr("height", y.bandwidth())),
  exit => exit
    .call(exit => exit.transition()
      .duration(500)
      .attr("y", initialHeight)
      .attr("height", 0)
      .remove()) //left off here - some kind of error
);

svg.append("text")
  .attr("x", margin.left)
  .attr("y", margin.top - 7)
  .attr("text-anchor", "middle")
  .attr("class", "chart-title")
  .text("# of Nonprofits by Activity");
  
let tooltip = d3.select("body").select(".tooltip");
if (tooltip.empty()) {
  tooltip = d3.select("body")
    .append("div")
    .attr("class", "tooltip")
    .style("opacity", 0)
    .style("position", "absolute")
    .style("background-color", "white")
    .style("border", "1px solid black")
    .style("padding", "10px")
    .style("pointer-events", "none"); // To prevent blocking mouse events
}

bars.on("mouseover", function(event, d) {
    tooltip.transition()
      .duration(200)
      .style("opacity", 0.9);
    tooltip.html(`Activity: ${d.NTEE_Core_Description}<br>Count: ${d.Count}`) // Customize tooltip content
      .style("left", (event.pageX + 10) + "px")
      .style("top", (event.pageY - 28) + "px");
  })
  .on("mousemove", function(event) {
    tooltip.style("left", (event.pageX + 10) + "px")
      .style("top", (event.pageY - 28) + "px");
  })
  .on("mouseout", function() {
    tooltip.transition()
      .duration(500)
      .style("opacity", 0);
  });

return svg.node();
}
{

filteredData.sort((a,b) => b.Count - a.Count);

const columnValues = filteredData.map(d => d.NTEE_Full_Description);

const uniqueValues = [...new Set(columnValues)];

const uniqueCount = uniqueValues.length;

const initialWidth = 600; // Initial width for viewBox
const initialHeight =  uniqueCount * 15;// Initial height for viewBox

const margin = {top: 25, right: 30, bottom: 40, left: 300};
//const width = 1000 - margin.left - margin.right;
//const height = 500 - margin.top - margin.bottom;

var svg = d3.create("svg")
    .attr("viewBox", [0, 0, initialWidth, initialHeight]) // Set the viewBox
    .attr("width", "100%") // Make it responsive width-wise
    .attr("height", "100%"); // Make it responsive height-wise
    //.attr("width", width + margin.left + margin.right)
    //.attr("height", height + margin.top + margin.bottom);

var x = d3.scaleLinear()
  .domain([0, d3.max(filteredData, d => d.Count)])
  .range([0, initialWidth - margin.left - margin.right]);

var y = d3.scaleBand()
  .range([0, initialHeight - margin.top - margin.bottom])
  .domain(filteredData.map(d => d.NTEE_Full_Description))
  .padding(0.1);

var plotGroup = svg.append("g")
  .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

// Corrected x-axis placement
plotGroup.append("g")
  .attr("class", "xAxis")
  .attr("transform", `translate(0,${initialHeight - margin.top - margin.bottom})`) // Place at the bottom
  .call(d3.axisBottom(x));

plotGroup.append("g")
  .attr("class", "yAxis")
  .call(d3.axisLeft(y))
  .selectAll("text")
  .style("text-anchor", "end");

const bars = plotGroup.selectAll("rect")
  .data(filteredData)
  .join(
  enter => enter.append("rect")
  .attr("x", x(0)+1)
  .attr("y", initialHeight)
  .attr("width", function(d) { return x(d.Count); })
  .attr("height", 0) // Corrected height calculation
  .attr("fill", "#69B3A2")
  .call(enter => enter.transition()
    .duration(500)
    .attr("y", function(d) { return y(d.NTEE_Full_Description); })
    .attr("height", y.bandwidth())),
  update => update
    .call(update => update.transition()
      .duration(500)
      .attr("x", x(0)+1)
      .attr("y", function(d) { return y(d.NTEE_Full_Description); })
      .attr("width", function(d) { return x(d.Count); })
      .attr("height", y.bandwidth())),
  exit => exit
    .call(exit => exit.transition()
      .duration(500)
      .attr("y", initialHeight)
      .attr("height", 0)
      .remove()) //left off here - some kind of error
);

svg.append("text")
  .attr("x", margin.left)
  .attr("y", margin.top - 7)
  .attr("text-anchor", "middle")
  .attr("class", "chart-title");
  
svg.selectAll(".chart-title")
  .data([selectedGroup])
  .join("text")
    .text(d => d ? `Sub-activities among ${d} Nonprofits`: "All Categories");
    
let tooltip = d3.select("body").select(".tooltip");
if (tooltip.empty()) {
  tooltip = d3.select("body")
    .append("div")
    .attr("class", "tooltip")
    .style("opacity", 0)
    .style("position", "absolute")
    .style("background-color", "white")
    .style("border", "1px solid black")
    .style("padding", "10px")
    .style("pointer-events", "none"); // To prevent blocking mouse events
}

bars.on("mouseover", function(event, d) {
    tooltip.transition()
      .duration(200)
      .style("opacity", 0.9);
    tooltip.html(`Sub-Activity: ${d.NTEE_Full_Description}<br>Count: ${d.Count}`) // Customize tooltip content
      .style("left", (event.pageX + 10) + "px")
      .style("top", (event.pageY - 28) + "px");
  })
  .on("mousemove", function(event) {
    tooltip.style("left", (event.pageX + 10) + "px")
      .style("top", (event.pageY - 28) + "px");
  })
  .on("mouseout", function() {
    tooltip.transition()
      .duration(500)
      .style("opacity", 0);
  });
  
  
return svg.node();
}
{

summary_data.sort((a,b) => b.Perc_of_Assets - a.Perc_of_Assets);

const initialWidth = 600; // Initial width for viewBox
const initialHeight = 500; // Initial height for viewBox

const margin = {top: 25, right: 30, bottom: 40, left: 300};
//const width = 1000 - margin.left - margin.right;
//const height = 500 - margin.top - margin.bottom;

var svg = d3.create("svg")
    .attr("viewBox", [0, 0, initialWidth, initialHeight]) // Set the viewBox
    .attr("width", "100%") // Make it responsive width-wise
    .attr("height", "100%"); // Make it responsive height-wise
    //.attr("width", width + margin.left + margin.right)
    //.attr("height", height + margin.top + margin.bottom);

var x = d3.scaleLinear()
  .domain([0, d3.max(summary_data, d => d.Perc_of_Assets)])
  .range([0, initialWidth - margin.left - margin.right]);

var y = d3.scaleBand()
  .range([0, initialHeight - margin.top - margin.bottom])
  .domain(summary_data.map(d => d.NTEE_Core_Description))
  .padding(0.1);

var plotGroup = svg.append("g")
  .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

// Corrected x-axis placement
plotGroup.append("g")
  .attr("class", "xAxis")
  .attr("transform", `translate(0,${initialHeight - margin.top - margin.bottom})`) // Place at the bottom
  .call(d3.axisBottom(x)
          .tickFormat(d3.format(".0%")));

plotGroup.append("g")
  .attr("class", "yAxis")
  .call(d3.axisLeft(y))
  .selectAll("text")
  .style("text-anchor", "end");

const bars = plotGroup.selectAll("rect")
  .data(summary_data)
  .join(
  enter => enter.append("rect")
  .attr("x", x(0)+1)
  .attr("y", initialHeight)
  .attr("width", function(d) { return x(d.Perc_of_Assets); })
  .attr("height", 0) // Corrected height calculation
  .attr("fill", "#69B3A2")
  .call(enter => enter.transition()
    .duration(500)
    .attr("y", function(d) { return y(d.NTEE_Core_Description); })
    .attr("height", y.bandwidth())),
  update => update
    .call(update => update.transition()
      .duration(500)
      .attr("x", x(0)+1)
      .attr("y", function(d) { return y(d.NTEE_Core_Description); })
      .attr("width", function(d) { return x(d.Perc_of_Assets); })
      .attr("height", y.bandwidth())),
  exit => exit
    .call(exit => exit.transition()
      .duration(500)
      .attr("y", initialHeight)
      .attr("height", 0)
      .remove()) //left off here - some kind of error
);

svg.append("text")
  .attr("x", margin.left)
  .attr("y", margin.top - 7)
  .attr("text-anchor", "middle")
  .attr("class", "chart-title")
  .text("% of Nonprofit Sector Assets by Activity");
  
let tooltip = d3.select("body").select(".tooltip");
if (tooltip.empty()) {
  tooltip = d3.select("body")
    .append("div")
    .attr("class", "tooltip")
    .style("opacity", 0)
    .style("position", "absolute")
    .style("background-color", "white")
    .style("border", "1px solid black")
    .style("padding", "10px")
    .style("pointer-events", "none"); // To prevent blocking mouse events
}

const formatter = d3.format(".1%");

bars.on("mouseover", function(event, d) {
    tooltip.transition()
      .duration(200)
      .style("opacity", 0.9);
    tooltip.html(`Activity: ${d.NTEE_Core_Description}<br>% of Assets: ${formatter(d.Perc_of_Assets)}`) // Customize tooltip content
      .style("left", (event.pageX + 10) + "px")
      .style("top", (event.pageY - 28) + "px");
  })
  .on("mousemove", function(event) {
    tooltip.style("left", (event.pageX + 10) + "px")
      .style("top", (event.pageY - 28) + "px");
  })
  .on("mouseout", function() {
    tooltip.transition()
      .duration(500)
      .style("opacity", 0);
  });

return svg.node();
}
{

filteredData.sort((a,b) => b.Core_Assets - a.Core_Assets)
            .filter(d => d.Perc_of_Assets > 0.0);

const columnValues = filteredData.map(d => d.NTEE_Full_Description);

const uniqueValues = [...new Set(columnValues)];

const uniqueCount = uniqueValues.length;

const initialWidth = 600; // Initial width for viewBox
const initialHeight = uniqueCount * 15; // Initial height for viewBox

const margin = {top: 25, right: 30, bottom: 40, left: 300};
//const width = 1000 - margin.left - margin.right;
//const height = 500 - margin.top - margin.bottom;

var svg = d3.create("svg")
    .attr("viewBox", [0, 0, initialWidth, initialHeight]) // Set the viewBox
    .attr("width", "100%") // Make it responsive width-wise
    .attr("height", "100%"); // Make it responsive height-wise
    //.attr("width", width + margin.left + margin.right)
    //.attr("height", height + margin.top + margin.bottom);

var x = d3.scaleLinear()
  .domain([0, d3.max(filteredData, d => d.Core_Assets)])
  .range([0, initialWidth - margin.left - margin.right]);

var y = d3.scaleBand()
  .range([0, initialHeight - margin.top - margin.bottom])
  .domain(filteredData.map(d => d.NTEE_Full_Description))
  .padding(0.1);

var plotGroup = svg.append("g")
  .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

// Corrected x-axis placement
plotGroup.append("g")
  .attr("class", "xAxis")
  .attr("transform", `translate(0,${initialHeight - margin.top - margin.bottom})`) // Place at the bottom
  .call(d3.axisBottom(x)
          .tickFormat(d3.format("$,.2s")));

plotGroup.append("g")
  .attr("class", "yAxis")
  .call(d3.axisLeft(y))
  .selectAll("text")
  .style("text-anchor", "end");

const bars = plotGroup.selectAll("rect")
  .data(filteredData)
  .join(
  enter => enter.append("rect")
  .attr("x", x(0)+1)
  .attr("y", initialHeight)
  .attr("width", function(d) { return x(d.Core_Assets); })
  .attr("height", 0) // Corrected height calculation
  .attr("fill", "#69B3A2")
  .call(enter => enter.transition()
    .duration(500)
    .attr("y", function(d) { return y(d.NTEE_Full_Description); })
    .attr("height", y.bandwidth())),
  update => update
    .call(update => update.transition()
      .duration(500)
      .attr("x", x(0)+1)
      .attr("y", function(d) { return y(d.NTEE_Full_Description); })
      .attr("width", function(d) { return x(d.Core_Assets); })
      .attr("height", y.bandwidth())),
  exit => exit
    .call(exit => exit.transition()
      .duration(500)
      .attr("y", initialHeight)
      .attr("height", 0)
      .remove()) //left off here - some kind of error
);

svg.append("text")
  .attr("x", margin.left)
  .attr("y", margin.top - 7)
  .attr("text-anchor", "middle")
  .attr("class", "chart-title");
  
svg.selectAll(".chart-title")
  .data([selectedGroup])
  .join("text")
    .text(d => d ? `Total Assets by Sub-Activity among ${d} Nonprofits`: "All Categories");
  
let tooltip = d3.select("body").select(".tooltip");
if (tooltip.empty()) {
  tooltip = d3.select("body")
    .append("div")
    .attr("class", "tooltip")
    .style("opacity", 0)
    .style("position", "absolute")
    .style("background-color", "white")
    .style("border", "1px solid black")
    .style("padding", "10px")
    .style("pointer-events", "none"); // To prevent blocking mouse events
}

const formatter = d3.format("$,.3s")

bars.on("mouseover", function(event, d) {
    tooltip.transition()
      .duration(200)
      .style("opacity", 0.9);
    tooltip.html(`Activity: ${d.NTEE_Full_Description}<br>Total Assets: ${formatter(d.Core_Assets)}`) // Customize tooltip content
      .style("left", (event.pageX + 10) + "px")
      .style("top", (event.pageY - 28) + "px");
  })
  .on("mousemove", function(event) {
    tooltip.style("left", (event.pageX + 10) + "px")
      .style("top", (event.pageY - 28) + "px");
  })
  .on("mouseout", function() {
    tooltip.transition()
      .duration(500)
      .style("opacity", 0);
  });
  
return svg.node();
}
Expand
  • Idaho Nonprofit Classifications
  • Classifications by Activity (Filtered)
{

const initialWidth = 600; // Initial width for viewBox
const initialHeight = 500; // Initial height for viewBox

const margin = {top: 25, right: 30, bottom: 40, left: 300};
//const width = 1000 - margin.left - margin.right;
//const height = 500 - margin.top - margin.bottom;

var svg = d3.create("svg")
    .attr("viewBox", [0, 0, initialWidth, initialHeight]) // Set the viewBox
    .attr("width", "100%") // Make it responsive width-wise
    .attr("height", "100%"); // Make it responsive height-wise
    //.attr("width", width + margin.left + margin.right)
    //.attr("height", height + margin.top + margin.bottom);

var x = d3.scaleLinear()
  .domain([0, d3.max(class_sum, d => d.Count)])
  .range([0, initialWidth - margin.left - margin.right]);

var y = d3.scaleBand()
  .range([0, initialHeight - margin.top - margin.bottom])
  .domain(class_sum.map(d => d.Classification_Type))
  .padding(0.1);

var plotGroup = svg.append("g")
  .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

// Corrected x-axis placement
plotGroup.append("g")
  .attr("class", "xAxis")
  .attr("transform", `translate(0,${initialHeight - margin.top - margin.bottom})`) // Place at the bottom
  .call(d3.axisBottom(x));

plotGroup.append("g")
  .attr("class", "yAxis")
  .call(d3.axisLeft(y))
  .selectAll("text")
  .style("text-anchor", "end");

const bars = plotGroup.selectAll("rect")
  .data(class_sum)
  .join(
  enter => enter.append("rect")
  .attr("x", x(0)+1)
  .attr("y", initialHeight)
  .attr("width", function(d) { return x(d.Count); })
  .attr("height", 0) // Corrected height calculation
  .attr("fill", "#69B3A2")
  .call(enter => enter.transition()
    .duration(500)
    .attr("y", function(d) { return y(d.Classification_Type); })
    .attr("height", y.bandwidth())),
  update => update
    .call(update => update.transition()
      .duration(500)
      .attr("x", x(0)+1)
      .attr("y", function(d) { return y(d.Classification_Type); })
      .attr("width", function(d) { return x(d.Count); })
      .attr("height", y.bandwidth())),
  exit => exit
    .call(exit => exit.transition()
      .duration(500)
      .attr("y", initialHeight)
      .attr("height", 0)
      .remove()) //left off here - some kind of error
);

svg.append("text")
  .attr("x", margin.left)
  .attr("y", margin.top - 7)
  .attr("text-anchor", "middle")
  .attr("class", "chart-title")
  .text("Idaho Nonprofit Classifications");
  
let tooltip = d3.select("body").select(".tooltip");
if (tooltip.empty()) {
  tooltip = d3.select("body")
    .append("div")
    .attr("class", "tooltip")
    .style("opacity", 0)
    .style("position", "absolute")
    .style("background-color", "white")
    .style("border", "1px solid black")
    .style("padding", "10px")
    .style("pointer-events", "none"); // To prevent blocking mouse events
}

bars.on("mouseover", function(event, d) {
    tooltip.transition()
      .duration(200)
      .style("opacity", 0.9);
    tooltip.html(`Classification: ${d.Classification_Type}<br>Count: ${d.Count}`) // Customize tooltip content
      .style("left", (event.pageX + 10) + "px")
      .style("top", (event.pageY - 28) + "px");
  })
  .on("mousemove", function(event) {
    tooltip.style("left", (event.pageX + 10) + "px")
      .style("top", (event.pageY - 28) + "px");
  })
  .on("mouseout", function() {
    tooltip.transition()
      .duration(500)
      .style("opacity", 0);
  });

  
  
return svg.node();
}
{

const initialWidth = 600; // Initial width for viewBox
const initialHeight = 500; // Initial height for viewBox

const margin = {top: 25, right: 30, bottom: 40, left: 300};
//const width = 1000 - margin.left - margin.right;
//const height = 500 - margin.top - margin.bottom;

var svg = d3.create("svg")
    .attr("viewBox", [0, 0, initialWidth, initialHeight]) // Set the viewBox
    .attr("width", "100%") // Make it responsive width-wise
    .attr("height", "100%"); // Make it responsive height-wise
    //.attr("width", width + margin.left + margin.right)
    //.attr("height", height + margin.top + margin.bottom);

var x = d3.scaleLinear()
  .domain([0, d3.max(filteredClassData, d => d.Count)])
  .range([0, initialWidth - margin.left - margin.right]);

var y = d3.scaleBand()
  .range([0, initialHeight - margin.top - margin.bottom])
  .domain(filteredClassData.map(d => d.Classification_Type))
  .padding(0.1);

var plotGroup = svg.append("g")
  .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

// Corrected x-axis placement
plotGroup.append("g")
  .attr("class", "xAxis")
  .attr("transform", `translate(0,${initialHeight - margin.top - margin.bottom})`) // Place at the bottom
  .call(d3.axisBottom(x));

plotGroup.append("g")
  .attr("class", "yAxis")
  .call(d3.axisLeft(y))
  .selectAll("text")
  .style("text-anchor", "end");

const bars = plotGroup.selectAll("rect")
  .data(filteredClassData)
  .join(
  enter => enter.append("rect")
  .attr("x", x(0)+1)
  .attr("y", initialHeight)
  .attr("width", function(d) { return x(d.Count); })
  .attr("height", 0) // Corrected height calculation
  .attr("fill", "#69B3A2")
  .call(enter => enter.transition()
    .duration(500)
    .attr("y", function(d) { return y(d.Classification_Type); })
    .attr("height", y.bandwidth())),
  update => update
    .call(update => update.transition()
      .duration(500)
      .attr("x", x(0)+1)
      .attr("y", function(d) { return y(d.Classification_Type); })
      .attr("width", function(d) { return x(d.Count); })
      .attr("height", y.bandwidth())),
  exit => exit
    .call(exit => exit.transition()
      .duration(500)
      .attr("y", initialHeight)
      .attr("height", 0)
      .remove()) //left off here - some kind of error
);

svg.append("text")
  .attr("x", margin.left)
  .attr("y", margin.top - 7)
  .attr("text-anchor", "middle")
  .attr("class", "chart-title");
  
svg.selectAll(".chart-title")
  .data([selectedGroup])
  .join("text")
    .text(d => d ? `Classifications of ${d} Nonprofits`: "All Categories");
    
let tooltip = d3.select("body").select(".tooltip");
if (tooltip.empty()) {
  tooltip = d3.select("body")
    .append("div")
    .attr("class", "tooltip")
    .style("opacity", 0)
    .style("position", "absolute")
    .style("background-color", "white")
    .style("border", "1px solid black")
    .style("padding", "10px")
    .style("pointer-events", "none"); // To prevent blocking mouse events
}

bars.on("mouseover", function(event, d) {
    tooltip.transition()
      .duration(200)
      .style("opacity", 0.9);
    tooltip.html(`Classification: ${d.Classification_Type}<br>Count: ${d.Count}`) // Customize tooltip content
      .style("left", (event.pageX + 10) + "px")
      .style("top", (event.pageY - 28) + "px");
  })
  .on("mousemove", function(event) {
    tooltip.style("left", (event.pageX + 10) + "px")
      .style("top", (event.pageY - 28) + "px");
  })
  .on("mouseout", function() {
    tooltip.transition()
      .duration(500)
      .style("opacity", 0);
  });
  
  
return svg.node();
}
Expand
Plot.plot({
//title: "When organizations were ruled to be exempt...",
marginLeft: 65,
marginTop: 55,
marginBottom: 85,
  marks: [
  Plot.barY(
  filteredYearCounts,
  {
  x: "Ruling_Year",
  y: "count",
  title: d=> `${d.count} nonprofits were ruled exempt in ${d.Ruling_Year}`
}),
  Plot.text([`When organizations were first ruled to be exempt...`], {frameAnchor: "top-left", dy: -40, textAnchor: "start", fontWeight: "bold", fontSize: "20", fontFamily: "Gotham"})
] ,
  x: {
  label: "Year Ruled Exempt",
  tickFormat: (d) => String(Number(d)),
  tickRotate: -90
},
  y: {
  label: ""
}
})
Expand
Plot.plot({
marginLeft: 550,
marginTop: 55,
marginBottom: 100,
  marks: [
  Plot.barX(
  filteredAffiliations,
  {
  x: "count",
  y: "Affiliation_Coded",
  title: d=> `${d.count} nonprofits are affiliated as ${d.Affiliation_Coded}`,
  sort: {y: "x", reverse: true}
}),
 Plot.text([`Affiliation Status`], {frameAnchor: "top-left", dy: -40, textAnchor: "start", fontWeight: "bold", fontSize: "24", fontFamily: "Gotham"})
] ,
  x: {
  label: "Number of Organizations",
  //tickFormat: (d) => String(Number(d)),
  tickRotate: -90
},
  y: {
  label: "Affiliation Category"
}
})
Expand
Plot.plot({
marginLeft: 220,
marginTop: 55,
marginBottom: 100,
  marks: [
  Plot.barX(
  filteredOrgType,
  {
  x: "count",
  y: "Organization_Coded",
  title: d=> `${d.count} nonprofits are classified as ${d.Organization_Coded}`,
  sort: {y: "x", reverse: true}
}),
 Plot.text([`Organization Type`], {frameAnchor: "top-left", dy: -40, textAnchor: "start", fontWeight: "bold", fontSize: "24", fontFamily: "Gotham"})
] ,
  x: {
  label: "Number of Organizations",
  tickRotate: -90
},
  y: {
  label: "Organization Type"
}
})
Expand
viewof selectedZero = Inputs.toggle({label: "Exclude Zeros?", values: ["Yes", "No"]});
filteredAssets2 = {
 if (selectedZero === "No") {
    return filteredAssets;
  } else {
    return filteredAssets.filter(d => d.Assets_Coded != "$0");
  }
}

filteredIncome2 = {
 if (selectedZero === "No") {
    return filteredIncome;
  } else {
    return filteredIncome.filter(d => d.Income_Coded != "$0");
  }
}

filteredFinances2 = {
 if (selectedZero === "No") {
    return filteredFinances;
  } else {
    return filteredFinances.filter(d => d.Revenue_Coded != "$0");
  }
}
{
  const height = Math.min(width, 750);
  const radius = Math.min(width, height) / 2;
  const marginTop = 60;
  const marginLeft = 40;
  const minAngle = 0.15;

  const arc = d3.arc()
      .innerRadius(radius * 0.67)
      .outerRadius(radius - 1);

  const pie = d3.pie()
      .padAngle(1 / radius)
      .sort(null)
      .value(d => d.count);

  const color = d3.scaleOrdinal()
      .domain(filteredAssets2.map(d => d.Assets_Coded))
      .range(d3.quantize(t => d3.interpolateSpectral(t * 0.8 + 0.1), filteredAssets2.length).reverse());

  const svg = d3.create("svg")
      //.attr("width", width)
      .attr("height", height)
      .attr("viewBox", [-radius - marginLeft, -radius - marginTop, 2 * radius + marginLeft + 40, 2 * radius + marginTop])
      .attr("style", "max-width: 100%; height: auto;");
      
  const tooltip = d3.select("body")
    .append("div")
    .attr("class", "tooltip")
    .style("opacity", 0)
    .style("position", "absolute")
    .style("background-color", "white")
    .style("border", "1px solid #ccc")
    .style("padding", "8px")
    .style("border-radius", "4px")
    .style("font-size", "14px");

  svg.append("g")
    .selectAll()
    .data(pie(filteredAssets2))
    .join("path")
      .attr("fill", d => color(d.data.Assets_Coded))
      .attr("d", arc)
       .on("mouseover", function(event, d) { 
        tooltip.transition()
          .duration(200)
          .style("opacity", 0.9);
        tooltip.html(`${d.data.count.toLocaleString()} orgs have ${d.data.Assets_Coded} assets`)
          .style("left", (event.pageX + 10) + "px")
          .style("top", (event.pageY - 28) + "px");
        d3.select(this)
          .style("opacity", 0.8); 
      })
      .on("mouseout", function(event, d) { 
        tooltip.transition()
          .duration(500)
          .style("opacity", 0);
        d3.select(this)
          .style("opacity", 1); 
      });
   // .append("title")
   //   .text(d => `${d.data.count.toLocaleString()} orgs have ${d.data.Assets_Coded} assets`);
      
  const textGroup = svg.append("g")
      .attr("font-family", "Gotham")
      .attr("font-size", 14)
      .attr("text-anchor", "middle")
    .selectAll()
    .data(pie(filteredAssets2))
    .join("g")
    .attr("transform", d => {
        const centroid = arc.centroid(d);
        const x = centroid[0];
        const y = centroid[1];
        const scaleFactor = 0.84;
        const newX = x * scaleFactor;
        const newY = y * scaleFactor;
        return `translate(${newX},${newY})`;
      })
      .filter(d => (d.endAngle - d.startAngle) > minAngle)
      .each(function(d) { 
        const centroid = arc.centroid(d);
        const x = centroid[0];
        const y = centroid[1];
        const angle = Math.atan2(y, x) * 180 / Math.PI;
        const adjustedAngle = (angle > 90 || angle < -90) ? angle + 180 : angle;
        d3.select(this)
          .attr("transform", `${this.getAttribute("transform")} rotate(${adjustedAngle})`)
          .attr("text-anchor", (d) => (x > 0) ? "start" : "end");
      });
    
textGroup.append("text")
 .attr("y", "-0.4em")
          .attr("font-weight", "bold")
          .text(d => d.data.Assets_Coded);
          
textGroup.append("text")
 .attr("x", 0)
          .attr("y", "0.7em")
          .attr("fill-opacity", 1)
          .text(d => `${d.data.count.toLocaleString()} orgs`);

  svg.append("text")
      .attr("text-anchor", "middle")
      .attr("dominant-baseline", "central")
      .style("font-family", "Gotham")
      .style("font-size", "2em")
      .style("font-weight", "bold")
      .text("Assets");

  return svg.node();
}
Expand
{
  const height = Math.min(width, 750);
  const radius = Math.min(width, height) / 2;
  const marginTop = 60;
  const marginLeft = 40;
  const minAngle = 0.15;

  const arc = d3.arc()
      .innerRadius(radius * 0.67)
      .outerRadius(radius - 1);

  const pie = d3.pie()
      .padAngle(1 / radius)
      .sort(null)
      .value(d => d.count);

  const color = d3.scaleOrdinal()
      .domain(filteredIncome2.map(d => d.Income_Coded))
      .range(d3.quantize(t => d3.interpolateSpectral(t * 0.8 + 0.1), filteredIncome2.length).reverse());

  const svg = d3.create("svg")
      //.attr("width", width)
      .attr("height", height)
      .attr("viewBox", [-radius - marginLeft, -radius - marginTop, 2 * radius + marginLeft + 40, 2 * radius + marginTop])
      .attr("style", "max-width: 100%; height: auto;");
      
  const tooltip = d3.select("body")
    .append("div")
    .attr("class", "tooltip")
    .style("opacity", 0)
    .style("position", "absolute")
    .style("background-color", "white")
    .style("border", "1px solid #ccc")
    .style("padding", "8px")
    .style("border-radius", "4px")
    .style("font-size", "14px");

  svg.append("g")
    .selectAll()
    .data(pie(filteredIncome2))
    .join("path")
      .attr("fill", d => color(d.data.Income_Coded))
      .attr("d", arc)
       .on("mouseover", function(event, d) { 
        tooltip.transition()
          .duration(200)
          .style("opacity", 0.9);
        tooltip.html(`${d.data.count.toLocaleString()} orgs have ${d.data.Income_Coded} income`)
          .style("left", (event.pageX + 10) + "px")
          .style("top", (event.pageY - 28) + "px");
        d3.select(this)
          .style("opacity", 0.8); 
      })
      .on("mouseout", function(event, d) { 
        tooltip.transition()
          .duration(500)
          .style("opacity", 0);
        d3.select(this)
          .style("opacity", 1); 
      });
   // .append("title")
   //   .text(d => `${d.data.count.toLocaleString()} orgs have ${d.data.Assets_Coded} assets`);
      
  const textGroup = svg.append("g")
      .attr("font-family", "Gotham")
      .attr("font-size", 14)
      .attr("text-anchor", "middle")
    .selectAll()
    .data(pie(filteredIncome2))
    .join("g")
    .attr("transform", d => {
        const centroid = arc.centroid(d);
        const x = centroid[0];
        const y = centroid[1];
        const scaleFactor = 0.84;
        const newX = x * scaleFactor;
        const newY = y * scaleFactor;
        return `translate(${newX},${newY})`;
      })
      .filter(d => (d.endAngle - d.startAngle) > minAngle)
      .each(function(d) { 
        const centroid = arc.centroid(d);
        const x = centroid[0];
        const y = centroid[1];
        const angle = Math.atan2(y, x) * 180 / Math.PI;
        const adjustedAngle = (angle > 90 || angle < -90) ? angle + 180 : angle;
        d3.select(this)
          .attr("transform", `${this.getAttribute("transform")} rotate(${adjustedAngle})`)
          .attr("text-anchor", (d) => (x > 0) ? "start" : "end");
      });
    
textGroup.append("text")
 .attr("y", "-0.4em")
          .attr("font-weight", "bold")
          .text(d => d.data.Income_Coded);
          
textGroup.append("text")
 .attr("x", 0)
          .attr("y", "0.7em")
          .attr("fill-opacity", 1)
          .text(d => `${d.data.count.toLocaleString()} orgs`);
          
  svg.append("text")
      .attr("text-anchor", "middle")
      .attr("dominant-baseline", "central")
      .style("font-family", "Gotham")
      .style("font-size", "2em")
      .style("font-weight", "bold")
      .text("Income");



  return svg.node();
}
Expand
{
  const height = Math.min(width, 750);
  const radius = Math.min(width, height) / 2;
  const marginTop = 60;
  const marginLeft = 40;
  const minAngle = 0.15;
  const chartTitle = "Revenue";

  const arc = d3.arc()
      .innerRadius(radius * 0.67)
      .outerRadius(radius - 1);

  const pie = d3.pie()
      .padAngle(1 / radius)
      .sort(null)
      .value(d => d.count);

  const color = d3.scaleOrdinal()
      .domain(filteredFinances2.map(d => d.Revenue_Coded))
      .range(d3.quantize(t => d3.interpolateSpectral(t * 0.8 + 0.1), filteredFinances2.length).reverse());

  const svg = d3.create("svg")
    //  .attr("width", width)
      .attr("height", height)
      .attr("viewBox", [-radius - marginLeft, -radius - marginTop, 2 * radius + marginLeft + 40, 2 * radius + marginTop])
      .attr("style", "max-width: 100%; height: auto;");
      
  const tooltip = d3.select("body")
    .append("div")
    .attr("class", "tooltip")
    .style("opacity", 0)
    .style("position", "absolute")
    .style("background-color", "white")
    .style("border", "1px solid #ccc")
    .style("padding", "8px")
    .style("border-radius", "4px")
    .style("font-size", "14px");

  svg.append("g")
    .selectAll()
    .data(pie(filteredFinances2))
    .join("path")
      .attr("fill", d => color(d.data.Revenue_Coded))
      .attr("d", arc)
       .on("mouseover", function(event, d) { 
        tooltip.transition()
          .duration(200)
          .style("opacity", 0.9);
        tooltip.html(`${d.data.count.toLocaleString()} orgs have ${d.data.Revenue_Coded} revenue`)
          .style("left", (event.pageX + 10) + "px")
          .style("top", (event.pageY - 28) + "px");
        d3.select(this)
          .style("opacity", 0.8); 
      })
      .on("mouseout", function(event, d) { 
        tooltip.transition()
          .duration(500)
          .style("opacity", 0);
        d3.select(this)
          .style("opacity", 1); 
      });
   // .append("title")
   //   .text(d => `${d.data.count.toLocaleString()} orgs have ${d.data.Assets_Coded} assets`);
      
  const textGroup = svg.append("g")
      .attr("font-family", "Gotham")
      .attr("font-size", 14)
      .attr("text-anchor", "middle")
    .selectAll()
    .data(pie(filteredFinances2))
    .join("g")
    .attr("transform", d => {
        const centroid = arc.centroid(d);
        const x = centroid[0];
        const y = centroid[1];
        const scaleFactor = 0.84;
        const newX = x * scaleFactor;
        const newY = y * scaleFactor;
        return `translate(${newX},${newY})`;
      })
      .filter(d => (d.endAngle - d.startAngle) > minAngle)
      .each(function(d) { 
        const centroid = arc.centroid(d);
        const x = centroid[0];
        const y = centroid[1];
        const angle = Math.atan2(y, x) * 180 / Math.PI;
        const adjustedAngle = (angle > 90 || angle < -90) ? angle + 180 : angle;
        d3.select(this)
          .attr("transform", `${this.getAttribute("transform")} rotate(${adjustedAngle})`)
          .attr("text-anchor", (d) => (x > 0) ? "start" : "end");
      });
    
textGroup.append("text")
 .attr("y", "-0.4em")
          .attr("font-weight", "bold")
          .text(d => d.data.Revenue_Coded);
          
textGroup.append("text")
 .attr("x", 0)
          .attr("y", "0.7em")
          .attr("fill-opacity", 1)
          .text(d => `${d.data.count.toLocaleString()} orgs`);
          
  svg.append("text")
      .attr("text-anchor", "middle")
      .attr("dominant-baseline", "central")
      .style("font-family", "Gotham")
      .style("font-size", "2em")
      .style("font-weight", "bold")
      .text(chartTitle);



  return svg.node();
}
Expand
  • Financial Summary Table
  • The Full Data
Reactable.setFilter(
  'summary_tbl',
  'Activity',
  selectedGroup
);
undefined
Reactable.setFilter(
  'full_tbl',
  'Activity',
  selectedGroup
);
undefined
Activity
Sub-Activity
NAME
Avg. Assets
Avg. Income
Avg. Revenue
Organization Count
Philanthropy, Voluntarism and Grantmaking Foundations (21)
$4,734,594.94
$2,052,887.21
$240,231.55
393
Religion-Related (20)
$385,878.96
$194,028.24
$158,787.36
1360
Community Improvement & Capacity Building (25)
$1,071,317.20
$433,651.30
$430,276.02
513
Education (33)
$1,848,789.21
$888,908.90
$574,986.95
1384
Public Safety, Disaster Preparedness and Relief (16)
$115,382.41
$52,403.56
$50,374.39
132
Arts, Culture and Humanities (45)
$386,617.66
$172,176.30
$145,824.80
665
Human Services (57)
$570,551.03
$471,582.52
$446,929.31
629
Recreation & Sports (31)
$330,096.72
$211,100.74
$191,638.10
1052
Medical Research (13)
$1,158,609.21
$1,211,144.56
$1,264,505.87
38
Health Care (29)
$24,261,428.42
$36,711,892.22
$26,641,421.16
280
Housing & Shelter (19)
$2,907,603.70
$987,519.77
$979,356.70
145
Public & Societal Benefit (20)
$12,486,460.99
$886,949.63
$890,341.34
375
Environment (24)
$1,281,607.01
$573,548.56
$470,059.03
218
Crime & Legal-Related (23)
$376,595.51
$417,519.14
$427,758.42
97
Food, Agriculture and Nutrition (19)
$735,572.39
$501,805.78
$462,130.21
227
Civil Rights, Social Action & Advocacy (20)
$360,881.15
$611,535.51
$293,027.22
68
Voluntary Health Associations & Medical Disciplines (23)
$122,574.93
$67,481.12
$56,767.81
61
Mutual & Membership Benefit (15)
$2,278,862.44
$1,490,683.21
$1,477,305.70
339
Youth Development (22)
$534,490.28
$311,373.50
$258,722.37
269
Science & Technology (13)
$20,397.87
$51,359.48
$53,002.45
38
1–20 of 26 rows
NAME
ICO
STREET
CITY
Affiliation
Ruling Year
Deductibility
Foundation
Organization
Status
Latest Return Year
Assets
Income
Revenue
Filing Requirement
PF Filing
Activity
Sub-Activity
TUNNEY FOUNDATION
% DORIS F TUNNEY MD DIRECTOR
PO BOX 909
HAILEY
Independent
2002
Contributions are deductible
Private non-operating foundation
Corporation
Unconditional Exemption
2023
$500,000 - $999,999
$10,000 - $24,999
Unreported
Not required to file (all other)
990-PF return
Philanthropy, Voluntarism and Grantmaking Foundations
Philanthropy, Voluntarism and Grantmaking Foundations
IDAHO VIRTUAL HIGH SCHOOL INC
% LARRY SLADE
795 S HASKETT ST
MOUNTAIN HOME
Independent
2023
Contributions are deductible
School - 170(b)(1)(A)(ii)
Corporation
Unconditional Exemption
2024
$10,000,000 - $49,999,999
$5,000,000 - $9,999,999
$5,000,000 - $9,999,999
990 (all other) or 990EZ
No 990-PF return
Education
Education
HOMEDALE BIBLE MISSIONARY CHURCH
​
201 S 7TH ST W
HOMEDALE
Subordinate - Group Exemption
1957
Contributions are deductible
Church - 170(b)(1)(A)(i)
Association
Unconditional Exemption
​
$0
$0
Unreported
Not required to file (church)
No 990-PF return
Religion-Related
Religion-Related
PREVENTION SPECIALIST CERTIFICATION BOARD OF WASHINGTON STATE
% ELIZABETH A WILHELM
122 16TH AVE
LEWISTON
Independent
2016
Contributions are not deductible
All organizations except 501(c)3
Corporation
Unconditional Exemption
2023
$0
$0
$0
990-N
No 990-PF return
Community Improvement & Capacity Building
Community Improvement & Capacity Building
MOSES SONG MINISTRIES
% DERROL SAWYER
PO BOX 1862
BONNERS FERRY
Independent
2002
Contributions are deductible
Organization that receives a substantial part of its support from a governmental unit or the general public - 170(b)(1)(A)(vi)
Corporation
Unconditional Exemption
2023
$0
$0
$0
990-N
No 990-PF return
Religion-Related
Religion-Related
1–5 of 10093 rows
...
Expand